验证已登录用户新输入的密码

17

用户已登录并希望执行重要操作,我希望他们重新输入密码,以确保他们是已登录的用户。

如何确认此密码是账户持有人的密码?

很高兴通过ASP.NET Identity进行操作,或设置存储过程针对AspNetUsers表进行操作,或通过Entity Framework进行操作。

4个回答

20
我如何确认这个密码是属于账户持有者的?
通过ASP.NET Identity如何实现?
为了重新验证当前登录用户的密码,提供用户VerifyView来输入密码,并使用以下方法检查用户是否存在。 var user = await UserManager.FindAsync(User.Identity.Name, VerifyViewModel.Password) 如果找到用户,则可以确认请求来自账户持有者。
Membership.ValidateUser是早期版本的Membership框架中的方法,而不是ASP.NET Identity。

由于某种原因,我希望CheckPassword能做到这一点。但它并没有。。这很好用,谢谢。 - Bobby
今天我们不能使用FindAsync方法。请参考此问题:https://dev59.com/SJPfa4cB1Zd3GeqPDncH - Boris Makhlin

10

您还可以使用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.");
}

5

使用Identity框架时,永远不要直接访问数据库。始终使用提供的API。过去几年中,数据库结构已经多次更改,因此引入依赖项(例如数据上下文)是没有必要的增加工作量。

对于异步使用,请参见jd4u已经提供的答案。

同步地确定密码是否与当前用户匹配,您需要首先包含:

using Microsoft.AspNet.Identity;

这将引入一些同步的扩展方法到身份框架中。

您可以像这样在UserManager上使用Find进行检查:

var user = UserManager.Find(User.Identity.Name, password);
if (user != null)
{
    // It is them!
}

如果用户不为空,则密码与当前用户名匹配。

1
你可以使用UserManager来做到这一点:
if(UserManager.PasswordHasher.VerifyHashedPassword("hashedPassword", "password") 
    != PasswordVerificationResult.Failed)
{
    // password is correct 
}

更多信息请查看链接: 如何在Asp.Net身份验证2中手动检查密码?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接