gpt4 book ai didi

c# - 如何检查密码重置 token 是否已过期?

转载 作者:太空狗 更新时间:2023-10-29 22:25:25 29 4
gpt4 key购买 nike

我正在使用 ASP.NET Identity,并且我有基本的忘记密码/重置密码功能。

当您填写忘记密码的表单时,它会使用 _userManager.GeneratePasswordResetTokenAsync(user) 创建一个重置 token

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if (ModelState.IsValid)
{
var user = await _userManager.FindByNameAsync(model.Email);
if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
{
return View("ForgotPasswordConfirmation");
}

var code = await _userManager.GeneratePasswordResetTokenAsync(user);
var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme);
await _emailSender.SendEmailAsync(model.Email, "Reset Password",
$"Please reset your password by clicking here: <a href='{callbackUrl}'>link</a>");
return View("ForgotPasswordConfirmation");
}

// If we got this far, something failed, redisplay form
return View(model);
}

我注意到重置密码页面的唯一验证是检查代码是否为空,而不是同时检查代码是否仍然有效或是否过期。

[HttpGet]
[AllowAnonymous]
public IActionResult ResetPassword(string code = null)
{
if (code == null)
{
throw new Exception("A code must be supplied for password reset.");
}
var model = new ResetPasswordViewModel { Code = code };
return View(model);
}

它实际上并不检查 token 是否有效,直到您尝试重置密码并调用 _userManager.ResetPasswordAsync(user, model.Code, model.Password)

我希望能够在他们点击重置密码页面向用户显示消息时验证代码是否仍然有效,而不是在他们尝试重置密码之后。

有没有办法检查它是否有效?

最佳答案

以下代码用于验证重置 token 是否有效:

<强>1。创建代码并将其发送给用户

var code = await this._userManager.GeneratePasswordResetTokenAsync(user);

<强>2。验证 token

[HttpGet]
public async Task<IActionResult> ResetPassword(string UserId, string token)
{
...

ApplicationUser user = //get user;


if(!await this._userManager.VerifyUserTokenAsync(user,this._userManager.Options.Tokens.PasswordResetTokenProvider, "ResetPassword", token)){
ViewBag.Message = this._localizer["tokenNotValid"].Value;
}

...
}

请参阅 UserManager 代码:https://github.com/aspnet/Identity/blob/rel/2.0.0/src/Microsoft.Extensions.Identity.Core/UserManager.cs#L29

关于c# - 如何检查密码重置 token 是否已过期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46506393/

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