Member 13237087 Ответов: 0

Как получить забытый пароль в 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 [^]

0 Ответов