Добрый день, ребята,
У меня есть проблема. Мне удалось создать учетные записи пользователей с полями user_ID, Username и Password.
Пароль хеширован и засолен, и он работает нормально. Теперь я хочу создать форму входа в систему, где пользователю необходимо пройти аутентификацию с использованием имени пользователя и пароля.
Я хочу проверить, правильно ли указан пароль и имя пользователя. Этот пароль должен быть сначала ha sh, а затем сравнить с тем, что находится в базе данных.
Ниже приведен мой код, но он продолжает выдавать ошибку неверного пароля.
try
{
string connString = CommonVariables.ConnectionString;
// Hashing the password field first for it to be
string sql = "SELECT * FROM tbl_Users WHERE (Username = @Username) ";
using (SqlConnection cnn = new SqlConnection(connString))
{
cnn.Open();
using (SqlCommand cmd = new SqlCommand(sql, cnn))
{
//cmd.Parameters.AddWithValue("@Password", SqlDbType.NVarChar).Value = txt_Password.Text.Trim();
cmd.Parameters.AddWithValue("@Username", SqlDbType.NVarChar).Value = txt_Username.Text.Trim();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (reader.HasRows)
{
while (reader.Read())
{
// string vsibility = reader["Visibility"].ToString(); //Getting the value of the visibility to determine if the user can logon or not
// string user_role = reader["User_Role"].ToString(); // Getting the User_role of the person login on
string mypassword = reader["password"].ToString();
var hash = PasswordHashing.SecurePasswordHasher.Hash(mypassword);
var hashverify = PasswordHashing.SecurePasswordHasher.Verify(txt_Password.Text.Trim(), hash);
if (hashverify == true)
{
this.Hide();
new Mainmenu().Show(); ;
}
else
{
MessageBox.Show("incorrect password" + mypassword);
}
}
}
else
{
MessageBox.Show("Invalid Username, Please Confirm", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txt_Username.Focus();
return;
}
}
}
}
catch (Exception c)
{
MessageBox.Show(c.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}