[HttpPost("signUp")]
public async Task<ActionResult<Users>> PostUserRegister(Users user)
{
if (userEmailExists(user.Email))
{
return BadRequest();
}
string salt = BC.GenerateSalt(12);
// hash password
user.Password = BC.HashPassword(user.Password, salt);
_context.Database.ExecuteSqlRaw("EXECUTE dbo.UserRegister @userName, @firstName, @lastName, @Password, @userEmail, @gender, @dob",
new SqlParameter("@userName", user.UserName.ToString()),
new SqlParameter("@firstName", user.FirstName.ToString()),
new SqlParameter("@lastName", user.LastName.ToString()),
new SqlParameter("@Password", user.Password.ToString()),
new SqlParameter("@userEmail", user.Email.ToString()),
new SqlParameter("@gender", user.Gender.ToString()),
new SqlParameter("@dob", user.Dob));
/* var format = "dd/MM/yyyy";
var date = DateTime.ParseExact(user.Dob, format);*/
return Ok(user);
//_context.Users.Add(users);
//await _context.SaveChangesAsync();
//return CreatedAtAction("GetUsers", new { id = users.UserId }, users);
}
Я подписываю нового пользователя вот так. Хэширование пароля с помощью Bcrypt.
using BC = BCrypt.Net.BCrypt;
[HttpPost("login")]
public async Task<ActionResult<Users>> PostUserLogin(Users user)
{
// get account from database
var account = _context.Users.SingleOrDefault(x => x.Email == user.Email);
// check account found and verify password
if (account == null ||!BC.Verify(user.Password, account.Password))
{
// authentication failed
return Unauthorized(user);
}
else
{
// authentication successful
return Ok(user);
}
Затем я пытаюсь проверить пароль в функции входа в систему. Когда я отлаживаю, чтобы увидеть значения user.Password и account.Password, они верны. user.Password равен паролю, введенному пользователем для регистрации и учетной записи.Password — это хешированный пароль, хранящийся в базе данных. Я пытался следовать этому руководству ASP.NET Core 3.1 — хеширование и проверка паролей с помощью BCrypt.
Решение проблемы
Я прочитал блог, который вы предоставили. И я думаю, что мы должны перепроверить нижеуказанные пункты.
Формат пароля в вашей БД, если исходный пароль 11, то сохраненное значение должно выглядеть так:
$2a$12$NTuJLk9/xZnlxP.oFj1mu.1ZypqYP4YuS1QbTBy7ofJwzKLSEEVBq
В этой строке BC.Verify(user.Password, account.Password),
Значение user.Password
user.Password == 11
И значение account.Password
account.Password == $2a$12$NTuJLk9/xZnlxP.oFj1mu.1ZypqYP4YuS1QbTBy7ofJwzKLSEEVBq
Пожалуйста, проверьте это еще раз, если у вас все еще есть проблема, вы можете добавить изображение с результатом отладки.
Комментариев нет:
Отправить комментарий