45

我想知道是否有办法使用UserManagerASP.NET MVC 5重置密码

我对已经有密码但没有成功的用户进行了尝试。有什么线索吗?

IdentityResult result = UserManager.AddPassword(forgotPasswordEvent.UserId.ToString(), model.ConfirmPassword);
if (result.Succeeded)
{
       //
}
else
{
        AddErrors(result);
}
4

7 回答 7

87

在这里ASP.NET Identity 重置密码

UserManager<IdentityUser> userManager = 
    new UserManager<IdentityUser>(new UserStore<IdentityUser>());

userManager.RemovePassword(userId);

userManager.AddPassword(userId, newPassword);
于 2014-03-20T13:12:06.000 回答
31

我想这是较新的,但 Identity 2.0 中有这样的 API:

IdentityResult result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);

model.Code 是通过以下方式生成的,您应该将其作为电子邮件中的链接发送,以确保声称要更改密码的用户是拥有该电子邮件地址的用户:

string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
于 2014-09-13T22:03:00.800 回答
8
var validPass= await userManager.PasswordValidator.ValidateAsync(txtPassword1.Text);
if(validPass.Succeeded)
{
    var user = userManager.FindByName(currentUser.LoginName);
    user.PasswordHash = userManager.PasswordHasher.HashPassword(txtPassword1.Text);
    var res= userManager.Update(user);
    if(res.Succeeded)
    {
        // change password has been succeeded
    }
}
于 2018-06-29T14:30:35.247 回答
6

尝试使用用户存储:

 var user = UserManager.FindById(forgotPasswordEvent.UserId);

 UserStore<ApplicationUser> store = new UserStore<ApplicationUser>();
 store.SetPasswordHashAsync(user, uManager.PasswordHasher.HashPassword(model.ConfirmPassword));

IdentityMembership 很酷,但仍然缺乏一些实现

更新

Identity 2.0 现已推出,并具有更多功能

于 2014-03-19T20:09:01.437 回答
4

试试这个代码。它工作得很好:

    var userStore = new UserStore<IdentityUser>();

    var userManager = new UserManager<IdentityUser>(userStore);

    string userName= UserName.Text;

    var user =userManager.FindByName(userName);
    if (user.PasswordHash != null  )
    {
        userManager.RemovePassword(user.Id);
    }

    userManager.AddPassword(user.Id, newpassword);
于 2017-03-04T05:43:17.680 回答
3

我将此添加到我的 UserManager 类中:

    public virtual async Task<IdentityResult> UpdatePassword(ApplicationUser user, string newPassword)
    {
        var passwordStore = Store as IUserPasswordStore<ApplicationUser, string>;

        if (passwordStore == null)
            throw new Exception("UserManager store does not implement IUserPasswordStore");

        var result = await base.UpdatePassword(passwordStore, user, newPassword);

        if (result.Succeeded)
            result = await base.UpdateAsync(user);

        return result;
    }
于 2015-10-25T17:42:41.823 回答
2

在命名空间 Microsoft.AspNet.Identity 中有更改密码的扩展。

https://msdn.microsoft.com/en-us/library/dn497466(v=vs.108).aspx

于 2017-05-30T07:11:24.420 回答