【发布时间】:2021-09-10 18:30:20
【问题描述】:
当我使用这段代码时:
var passwordHasher = new PasswordHasher();
string hashedPassword = passwordHasher.HashPassword(pp.Password);
User newUser = new User()
{
UserName = pp.NationalCode,
Pcode = pp.Pcode,
PasswordHash = hashedPassword,
};
var result = _UserManager.CreateAsync(newUser).Result;
结果会成功,但是如果我使用下面的代码
User newUser = new User()
{
UserName = pp.NationalCode,
Pcode = pp.Pcode,
};
var result = _UserManager.CreateAsync(newUser,pp.Pasword).Result;
结果将是错误的。
另一方面,由于不是由身份哈希系统生成的密码,我不能在用户登录时使用它,因为(可能和肯定)算法不同。
我的登录代码是:
if (ModelState.IsValid)
{
var user = _UserManager.FindByNameAsync(lc.UserName).Result;
_SignInManager.SignOutAsync();
if (user != null)
{
var result =await _SignInManager.PasswordSignInAsync(user,lc.Password, lc.IsPersistent, false);
if (result.Succeeded)
{
TempData["LoggedUserCode"] = user.Pcode;
return RedirectToAction("Index", "Home");
}
}
ModelState.AddModelError("", "Invalid User or Password");
}
【问题讨论】:
-
您想使用自己的密码哈希的原因是什么?
-
你可能需要实现自己的
IPasswordValidator -
我不需要手动做哈希密码。只是我这样做是为了测试以确保问题是否来自密码哈希或其他项目。
标签: asp.net-core model-view-controller asp.net-identity password-hash usermanager