gpt4 book ai didi

c# - 如何从 ASP.NET Identity 2.0 中的 PasswordReset token 获取 UserId?

转载 作者:行者123 更新时间:2023-12-03 20:59:07 27 4
gpt4 key购买 nike

要重置密码,我们需要知道 UserId 并将其传递给 UserManager.ResetPasswordAsync 方法。在 Identity 1.0 中,可以从 UserManager.PasswordResetTokens.Validate 方法 ((UserManager.PasswordResetTokens.Validate(token)).UserId 中获取 UserId。现在它不见了,所有现有的例子都告诉我我需要向用户询问用户名或电子邮件。这不是用户友好的,如果 token 有效,我不希望我的用户再次输入用户名。

这在 ASP.NET Identity 中已经是既定的传统——以前的工作在新版本中被打破了。当然,我可以使用嵌入的 UserId 创建自己的组合 token ,但为什么我需要做额外的工作?新版本应该改进事情,而不是让事情变得更糟。

最佳答案

Asp.Net Identity 2.x 不提供通过从 GeneratePasswordResetTokenAsync 方法创建的 token 查找用户的方法。

您有两个选择:

1) 在您将发送给用户的网址中添加用户 ID。前任:

var token = await _userManager.GeneratePasswordResetTokenAsync(applicationUser);

var callbackUrl = $"/reset-password/?user={WebUtility.UrlEncode(applicationUser.Id)}&code={WebUtility.UrlEncode(token)}";

这种方法对用户更友好。但我知道有人说这是一个安全问题,因为任何知道链接的人都可以重置用户密码。

2) 像您一样在重置密码页面上询问用户名。前任:
public async Task<YourResultModel> ResetPassword(ResetPasswordViewModel vm)
{
// Your password validations...

var user = await _userManager.FindByNameAsync(vm.UserName);
// could be FindByEmailAsync if your app uses the user e-mail to login.

IdentityResult result = await _userManager.ResetPasswordAsync(user, vm.Token, vm.NewPassword);

return YourResultModelFromIdentityResult(result);
}

在这两种方法之间进行选择之前,您需要考虑您的特定场景。例如:如果您的应用使用用户电子邮件作为用户名并拦截“拦截器”访问用户电子邮件所需的 token ,则从重置密码链接中删除用户 ID 不会提高应用的安全性。因为拥有链接的人已经知道用户的电子邮件。

关于c# - 如何从 ASP.NET Identity 2.0 中的 PasswordReset token 获取 UserId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22765213/

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