Как получить забытый пароль в ASP.NET 3-уровневая архитектура и хранимая процедура
Привет, сэр, я разрабатываю проект int, в котором мне нужно написать код для forget password, я написал какой-то код и проверяю этот код, поставив какую-то точку отладки.при отладке пароль из базы данных считывается в уровень доступа к данным, но при выходе из цикла из уровня доступа к данным он показывает null.Я пытался, но я не мог получить .здесь я даю свой код,который я пробовал.
в базе данных мой код таков:
Создать процедуру sp_ForgetPwd(
@UserName varchar (20),
@SecurityQuetion varchar (макс.) ,
@Answer varchar (Max))
как
начать
выберите пароль из tb_Login, где UserName=@UserName и SecurityQuetion=@SecurityQuetion и Answer=@Answer
конец
на уровне представления код выглядит следующим образом:
охраняемых недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
строка username = TextBox2. Text;
строки securityquestion = DropDownList1.Элемент.Текст;
строку ANS = TextBox5.Текст;
строка pwd = "";
Сессия ["pwd"] = pwd;
b.Forgetpwd(имя пользователя, securityquestion, ans, pwd);
Этикетка 1.Text = "Ваш пароль" + Session ["pwd"];
}
в слое доступа к данным код:
общественного строка Forgetpwd(строка имя пользователя,строка securityquestion ,струнный Анс строку инвалидов)
{
против.Открыть();
SqlCommand cmd = new SqlCommand ("sp_ForgetPwd", con);
УМК.CommandType = CommandType.Хранимая процедура;
УМК.Параметры.AddWithValue ("@UserName", имя пользователя);
УМК.Параметры.AddWithValue ("@SecurityQuetion", securityquestion );
УМК.Параметры.AddWithValue ("@Answer", ans);
пробовать
{
Sqldataadapter adapter = новый SqlDataAdapter(cmd);
DataSet ds = новый набор данных();
адаптер.Заполнить(ДС);
SqlDataReader dr = cmd.Метода executereader();
если (ДС.Таблицы[0].Строк.Граф> 0)
{
фрд = ДС.Таблицы[0].Строки[0]["Пароль"].Метод toString();
}
}
поймать (исключение бывший)
{
пароль = "";
}
возвращение инвалидов;
}
в бизнес-слое код таков:
общественного строка Forgetpwd(строка имя пользователя,строка securityquestion ,струнный Анс строку инвалидов)
{
возвращение д'.Forgetpwd(имя пользователя, securityquestion , Анс инвалидов);
}
Пожалуйста, кто-нибудь помогите мне решить эту проблему.
И заранее спасибо.
Что я уже пробовал:
я пробовал вышеописанный код и пробовал каким-то другим способом, но проблема все еще остается.
ZurdoDev
Вероятно, он попадает в исключение, где вы устанавливаете pwd ="". Просто продолжайте отлаживать. Мы не можем запустить ваш код, но это то, что мы сделали бы, если бы были на вашем месте. Найти ее.
F-ES Sitecore
Для чего эта линия?
SqlDataReader dr = cmd.Метода executereader();
Вы уверены, что ваш код не попадет в блок "catch" при возникновении ошибки? Когда вы отлаживаете пароль в "pwd", все в порядке?
Кроме того, вся эта концепция-плохая идея, вы никогда не должны хранить пароли в обычном тексте или позволять людям восстанавливать их. Хранение пароля в сеансе также очень плохая идея.
Member 13237087
Да, это не удар по блоку улова.Пока он не достигнет "return pwd", он показывает пароль после того, как он покидает последний блок (}), он переходит на бизнес-уровень, где он показывает null.
Richard Deeming
Никогда храните пароль в виде простого текста!
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хеширование паролей - все правильно[^]
И никогда позвольте пользователю "восстановить" свой пароль; если он не может его вспомнить,то вместо этого сбросьте его.
Трой Хант: все, что вы когда-либо хотели знать о создании безопасной функции сброса пароля[^]
Вы также пытаетесь изобрести колесо ... ASP.NET имеет несколько совершенно хороших встроенных систем аутентификации / авторизации. Например, Личность ASP.NET [^]