UserManager.AddPassword没有按预期工作

时间:2014-10-08 00:45:32

标签: asp.net-mvc asp.net-mvc-5 asp.net-identity asp.net-identity-2

我使用ASP.NET Identity作为MVC5的成员资格,并为admin用户提供了一个页面来管理用户和角色。我试图允许管理员更改任何其他用户的密码,如果他需要这样做。我正在使用此代码执行任务:

userManager.RemovePassword(userId);
userManager.AddPassword(userId, newPassword);

看起来很简单,但当我尝试使用我刚创建的新密码登录时,我无法做到;我收到了无效的密码信息。

我试图通过尝试查找密码的密码并发现这一点来进一步调查此问题:

string hashed = userManager.PasswordHasher.HashPassword("some password");

首先,我假设密码hasher是AddPassword()内部使用的密码。 其次,我注意到每次运行HashPassword('some password')时,我都会收到一个完全不同的哈希值。

我不明白......

1 个答案:

答案 0 :(得分:-1)

好吧,我发现了问题,因为AccountController中有以下代码行:

var user = await UserManager.FindAsync(model.Email, model.Password);

此处发生的是FindAsync需要用户名,而不是电子邮件以及我正在测试的用户,用户名和电子邮件是不同的。

我想知道是否可能更改了Login操作中的代码以传递电子邮件地址并且不记得...所以我创建了一个新的MVC5项目并且用Nuget更新到最新版本......好吧,它看起来像是一个bug!是的,默认实现实际上将电子邮件地址传递给FindAsync。显然这是因为当您注册新用户时,它会将用户名设置为电子邮件地址(因此它们是相同的,并不重要)。但是,他们没有考虑到有人可能想要更改用户名的事实!

解决!