проверка и изменение пароля пользователя - PullRequest
4 голосов
/ 29 июня 2011

У меня есть простая форма C # windows, которая действует как логин, но также имеет форму для изменения пароля пользователя.

Когда вы нажимаете «Изменить пароль», форма загружается с текстовым полем текущего пароля, новым проходом и подтверждением нового прохода и одной кнопкой сохранения.

Я сохранил имя пользователя в метке, чтобы можно было проверить текущий пароль, если он действителен из базы данных или нет.

Я храню их в таблице, созданной в Microsoft SQL Server 2008.

Код выглядит следующим образом.

SqlConnection connect = new SqlConnection(str); 
connect.Open(); 
string username = label_username.Text; 
string password = textBox_Current.Text; 
string newPassword = textBox_New.Text; 
string confirmPassword = textBox_Verify.Text; 
string sqlquery = "UPDATE [Member] SET Password=@newpass where Username=@username"; 
SqlCommand cmd = new SqlCommand(sqlquery, connect); 
cmd.Parameters.AddWithValue("@newpass", textBox_Verify.Text);   
cmd.Parameters.AddWithValue("@username", label_username.Text);   
cmd.Parameters.AddWithValue("@password", textBox_Current.Text); 
cmd.Connection = connect; 
cmd.ExecuteNonQuery(); 
sqlDataReader reader = null; 
reader = cmd.ExecuteReader(); 
while (reader.Read())
 { 
if ((textBox_New.Text == reader["newPassword"].ToString()) & (textBox_Verify.Text == (reader["confirmPassword"].ToString()))) { } 
}
 MessageBox.Show("Password Changed Successfully!"); 
this.Close();

При выполнении вышеуказанного кода, пароль меняется, но я хочу:

  • проверить правильность, например, если пользователь ввел неправильный пароль в текущем пароле.
  • новый пароль и подтверждение пароля.
  • когда пользователь нажимает на первое сохранение, нижний пустой пароль не должен храниться в базе данных, а должен давать сообщение «пожалуйста, введите пароль»

Как это можно сделать?

Ответы [ 3 ]

3 голосов
/ 29 июня 2011

Вы действительно не должны хранить эти пароли в виде простого текста. Вы должны хешировать пароль и хранить хеш. Затем, если вы хотите проверить, является ли пароль правильным хешем, введенный пользователем пароль, и сравните его с хешем, сохраненным для пользователя.

Но, похоже, вам нужна помощь в извлечении значения из базы данных для текущего пользователя. Помещение чего-то вроде этого должно сделать это для вас. Обратите внимание, что, как я сказал выше, на самом деле это должен быть хэш пароля, а не фактический пароль в виде простого текста.

string sqlquery = "SELECT Password FROM [Member] where Username=@username";
SqlCommand cmd = new SqlCommand(sqlquery, connect);
cmd.Parameters.AddWithValue("@username", label_username.Text);
cmd.Connection = connect; 
string currentPassword = (string)cmd.ExecuteScalar();

if (currentPassword == textBox_Current.Text)
{
 // PASSWORD IS CORRECT, CHANGE IT, NOW.
} else {
 // WOW EASY BUDDY, NOT SO FAST
}
0 голосов
/ 05 февраля 2018
   protected void btn_PasswordChange(object sender, EventArgs e)
    {
        string constring = DataAccess.GetConnection();
        SqlConnection con = new `SqlConnection`(constring);

        {
            if (con.State != ConnectionState.Open)
                con.Open();
        }
        string str = "select * from tbl_MemberLogin where Password='" + txtoldpwd.Text + "'";
        DataTable DT = new DataTable();
        DT = objdut.GetDataTable(str);
        if (DT.Rows.Count == 0)
        {
            lblmsg.Text = "Invalid current password";
            lblmsg.ForeColor = System.Drawing.Color.Red;
        }
        else
        {
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "update tbl_MemberLogin set Password='" + txtnewpwd.Text + "' where UserName='" + Session["UserName"].ToString() + "'";
            cmd.ExecuteNonQuery();
            lblmsg.Text = "Password changed successfully";
            lblmsg.ForeColor = System.Drawing.Color.Green;
        }
    }
0 голосов
/ 29 июня 2011

Сначала вы должны использовать хеширование паролей в вашем приложении, поэтому в полях паролей базы данных должны храниться хэшированные значения.

Предполагая, что для достижения ваших целей

  1. рассмотримваша строка username -> Hash it -> напишите запрос, чтобы проверить, совпадает ли это хешированное значение и хеш-значение пароля пользователя, хранящееся в базе данных
  2. учитывает строковый пароль и строку newPassword в вашем коде -> Hash обоих-> проверить, совпадают ли значения хеша
  3. рассмотреть строковый пароль и строку newPassword -> проверить, является ли каждый из них нулевым или имеет длину 0

Также вы должны выполнить эти задачи вследующий порядок:

1 -> 3 -> 2

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...