GOOGLE ADS

понедельник, 11 апреля 2022 г.

Bcrypt Verify всегда возвращает false

 [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


  • Пожалуйста, проверьте это еще раз, если у вас все еще есть проблема, вы можете добавить изображение с результатом отладки.

    Комментариев нет:

    Отправить комментарий

    Laravel Datatable addColumn returns ID of one record only

    Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...