用户已登录并想做一些重要的事情,我希望他们重新输入密码,这样我就可以确保他们是已登录的用户。
我怎样才能确认这个密码是给账户持有人的?
很乐意知道如何通过ASP.NET Identity实现,或者如何设置存储过程以与AspNetUsers
表相匹配,或者如何通过实体框架实现。
我怎样才能确认这个密码是给账户持有人的?
如何通过ASP.NET Identity
要重新验证当前登录用户的密码,请提供用户VerifyView输入密码,并使用以下方法检查该用户是否存在。
var user = await UserManager.FindAsync(User.Identity.Name,VerifyViewModel.Password)
如果找到用户,则当前请求与账户持有人的请求相同。
Membership.ValidateUser来自早期版本的Membership框架,而不是ASP.NET Identity
您还可以使用UserManager.CheckPassword()
扩展函数:
UserManager扩展。检查密码方法
string id = User.Identity.GetUserId();
var user = UserManager.FindById(id);
if(!UserManager.CheckPassword(user, model.Password))
{
ModelState.AddModelError("Password", "Incorrect password.");
}
使用Identity框架,您永远不想直接访问数据库。始终使用提供的API。在过去的几年里,数据库结构已经发生了几次变化,因此引入依赖关系(例如,在数据上下文上)会无故增加工作量。
关于异步使用,请参阅jd4u
已经提供的答案。
对于同步识别密码与当前用户匹配,您需要首先包括:
using Microsoft.AspNet.Identity;
因为这为身份框架引入了许多同步的扩展方法。
然后,您可以在UserManager
上使用Find
进行检查,如下所示:
var user = UserManager.Find(User.Identity.Name, password);
if (user != null)
{
// It is them!
}
如果用户不为null,则密码和当前用户名匹配。
您可以使用UserManager来执行此操作:
if(UserManager.PasswordHasher.VerifyHashedPassword("hashedPassword", "password")
!= PasswordVerificationResult.Failed)
{
// password is correct
}
有关更多信息,请参阅链接:如何在Asp.Net身份2中手动检查密码?