gpt4 book ai didi

c# - ASP.NET MVC 和身份 - 重置密码不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:23 25 4
gpt4 key购买 nike

我在重置用户帐户密码时遇到问题。我正在使用 Microsoft 的方式来做到这一点,但它就是行不通。这是我用来生成重置密码 token 的代码

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();

效果很好,我在数据库中有 token ,我通过电子邮件将其发送给用户。然后用户必须单击链接。以下是我如何生成新密码并将旧密码替换为数据库中的新密码。

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();
}

这也行得通。我的意思是它更改数据库中的密码并通过电子邮件将其发送给用户。问题是用户无法使用新密码或旧密码登录。我没有在这里显示,但是我检查数据库中是否存在 token 和用户。

我做错了什么?

最佳答案

尽管您已经发现了问题,但我会尝试指出更好的方向。

  1. 您描述的不是“Microsoft”方式。我第一次看到这样的东西。这是模板的一部分吗?打开 Visual Studio 2013 并使用个人帐户创建一个新的 MVC 项目 - 这将为您提供“Microsoft”方式。

  2. 您将 token 保存在您的数据库中。没必要。 token 应作为链接通过电子邮件发送给用户,然后由用户单击,这样 token 将传递到您重置电子邮件的 Controller 。

  3. 您为用户生成一个新密码。不要那样做——让用户选择他们自己的密码。为此您使用 Membership - 混合使用 Identity 和 MembershipProvider 的错误做法。 MebershipProvider 具有很强的侵入性,并会在可能的时候尝试接管。可能它会在以后的生命周期中引起问题。

  4. 您将密码通过电子邮件发送给用户。非常糟糕的安全措施。电子邮件不是安全的 channel 。让用户在您的网页上选择他们的新密码,不要通过电子邮件发送密码。

Troy Hunt about password resetting 强烈推荐的文章- 如果您使用密码,这是一本非常值得一读的书。

关于c# - ASP.NET MVC 和身份 - 重置密码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27744221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com