【发布时间】:2015-02-28 21:45:35
【问题描述】:
我在重置用户帐户密码时遇到问题。我正在使用微软的方式来做到这一点,但它只是不工作。这是我用来生成重置密码令牌的代码
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();
}
这也有效。我的意思是它更改数据库中的密码并通过电子邮件将其发送给用户。问题是用户无法使用新密码或旧密码登录。 我这里没有展示,但是我检查了数据库中是否同时存在令牌和用户。
我做错了什么?
【问题讨论】:
-
您是否有一个
IsConfirmed列可能被设置为 false? -
我在 AspNetUser 表中确实有 EmailConfirmed 列,但它总是设置为 false 并且没有问题(一切正常)。它可能因此而不起作用吗? Edit我改了还是不行。
-
如果它在此之前有效,那可能不是问题,这只是我之前发现的东西,所以我想我会提到它!
-
我修好了。这不是代码错误,但我更改了数据库中的用户电子邮件并尝试重置他的密码。当我使用这封电子邮件添加新用户时,一切正常:)
-
我遇到了同样的问题,你能扩展你的解决方案吗?
标签: c# asp.net-mvc asp.net-identity