用户已登录并希望执行重要操作,我希望他们重新输入密码,以确保他们是已登录的用户。
如何确认此密码是账户持有人的密码?
很高兴通过ASP.NET Identity进行操作,或设置存储过程针对AspNetUsers
表进行操作,或通过Entity Framework进行操作。
用户已登录并希望执行重要操作,我希望他们重新输入密码,以确保他们是已登录的用户。
如何确认此密码是账户持有人的密码?
很高兴通过ASP.NET Identity进行操作,或设置存储过程针对AspNetUsers
表进行操作,或通过Entity Framework进行操作。
var user = await UserManager.FindAsync(User.Identity.Name, VerifyViewModel.Password)
如果找到用户,则可以确认请求来自账户持有者。您还可以使用UserManager.CheckPassword()
扩展函数:
UserManagerExtensions.CheckPassword方法
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!
}
if(UserManager.PasswordHasher.VerifyHashedPassword("hashedPassword", "password")
!= PasswordVerificationResult.Failed)
{
// password is correct
}
更多信息请查看链接: 如何在Asp.Net身份验证2中手动检查密码?