[英]How do I implement password reset with ASP.NET Identity for ASP.NET MVC 5.0?
[英]ASP.NET MVC and Identity - Reset password doesn't work
我有重置用户帐户密码的问题。 我使用微软的方式来做到这一点,但它只是没有用。 这是我用来生成重置密码令牌的代码
var resetPasswordToken = new ResetPasswordToken
{
Id = Guid.NewGuid().ToString(),
Token = UserManager.GeneratePasswordResetToken(user.Id),
User = user,
ValidFrom = DateTime.Now,
ValidTo = DateTime.Now.AddMinutes(ApplicationConstants.SettingsResetPasswordTokensValidTimeInMinutes)
};
_resetPasswordTokensRepository.Insert(resetPasswordToken);
_resetPasswordTokensRepository.Save();
var email = new ResetPasswordEmailModel
{
ResetPasswordToken = resetPasswordToken,
User = user
};
IUserMailer mailer = new UserMailer();
mailer.ResetPassword(email).Send();
这很好,我在数据库中有令牌,我通过电子邮件发送给用户。 然后用户必须单击该链接。 这是我如何生成新密码并用数据库中的新密码替换旧密码。
var resetPasswordToken = _resetPasswordTokensRepository.GetByEmailAndToken(email, code);
var newPassword = Membership.GeneratePassword(10, 2);
var result = await UserManager.ResetPasswordAsync(user.Id, resetPasswordToken.Token, newPassword);
if (result.Succeeded)
{
_resetPasswordTokensRepository.Remove(resetPasswordToken);
_usersRepository.Save();
var model = new NewPasswordEmailModel
{
User = user,
Password = newPassword
};
IUserMailer mailer = new UserMailer();
mailer.NewPassword(model).Send();
}
这也有效。 我的意思是它更改数据库中的密码并通过电子邮件发送给用户。 问题是用户无法使用新密码或旧密码登录。 我没有在这里显示它,但我检查令牌和用户是否都存在于数据库中。
我究竟做错了什么?
尽管你已经发现了这个问题,但我会尝试指出一个更好的方向。
你所描述的不是“微软”的方式。 我第一次看到这样的东西。 这是模板的一部分吗? 打开Visual Studio 2013并使用个人帐户创建一个新的MVC项目 - 这将为您提供“Microsoft”方式。
您将令牌保存在DB中。 没必要。 令牌应作为链接通过电子邮件发送给用户,然后由用户单击,这样令牌将被传递到您重置电子邮件的控制器。
您为用户生成新密码。 不要这样做 - 让用户选择自己的密码。 并且您使用Membership
- 混合Identity和MembershipProvider的不良做法。 MebershipProvider非常具有侵略性,并试图在可能的情况下接管。 可能它会在以后的生命周期中引起问题。
您将密码通过电子邮件发送给用户。 非常糟糕的安全实践。 电子邮件不是安全的渠道。 让用户在您的网页上选择他们的新密码,不要通过电子邮件发送密码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.