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

时间:2013-12-14 03:25:51

标签: c# sql-server asp.net-mvc-5 asp.net-identity

用户已登录并想要做一些重要的事情,我希望他们重新输入密码,这样我就可以确保他们是登录的用户。

如何确认此密码是否适用于帐户持有人?

很高兴知道如何通过ASP.NET Identity或如何设置存储过程以反对AspNetUsers表或如何通过实体框架来完成。

4 个答案:

答案 0 :(得分:18)

  

如何确认此密码是否适用于帐户持有人?

     

如何通过ASP.NET身份进行操作

要重新验证当前登录用户的密码,请提供用户VerifyView输入密码,并使用以下方法检查用户是否存在。

var user = await UserManager.FindAsync(User.Identity.Name,VerifyViewModel.Password)

如果找到用户,则当前请求与帐户持有者相同。


Membership.ValidateUser来自早期版本的Membership框架,而不是来自ASP.NET Identity。

答案 1 :(得分:8)

您还可以使用UserManager.CheckPassword()扩展功能:

UserManagerExtensions.CheckPassword Method

string id = User.Identity.GetUserId();
var user = UserManager.FindById(id);
if(!UserManager.CheckPassword(user, model.Password))
{
    ModelState.AddModelError("Password", "Incorrect password.");
}

答案 2 :(得分:5)

使用Identity框架,您永远不想直接访问数据库。始终使用提供的API。数据库结构在过去几年中已经多次改变,因此引入依赖关系(例如在数据上下文中)无缘无故地添加工作。

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

对于同步标识密码与当前用户匹配,您需要首先包括:

using Microsoft.AspNet.Identity;

因为这为身份框架带来了许多同步扩展方法

然后,您可以Find上的UserManager查看,如下所示:

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

如果用户不为null,则表示您拥有密码和当前用户名匹配。

答案 3 :(得分:1)

您可以使用 UserManager 执行此操作:

if(UserManager.PasswordHasher.VerifyHashedPassword("hashedPassword", "password") 
    != PasswordVerificationResult.Failed)
{
    // password is correct 
}

有关更多信息,请参阅链接: How to check password manually in Asp.Net identity 2?