[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等于用户输入注册的密码和帐户的密码。密码是存储在数据库中的哈希密码。我试着按照这个教程ASP.NET Core 3.1 - Hash and Verify Passwords with BCrypt
2条答案
按热度按时间wfauudbj1#
我已经读了你提供的博客。我认为我们应该仔细检查以下几点。
1.数据库中密码的格式,如果原始密码为
11
,则存储的值应如下所示:1.在这行
BC.Verify(user.Password, account.Password)
、user.password的值
和帐户的值。密码
请仔细检查,如仍有问题,可添加调试结果图片。
py49o6xq2#
我和你一样对bCrypt有同样的问题。
主要的问题比我想象的要简单得多,主要原因是我在接收和保存密码时使用了大写和小写字母。
我修复了这个问题,使我的密码输入较低,并将其保存到db,当我想验证它,我使密码小写一次。
当您想要Verify时,请按如下方式使用它:
我想这是你的问题回答。