c# – 如何检查密码重置令牌是否已过期?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何检查密码重置令牌是否已过期?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2121字,纯文字阅读大概需要4分钟。
内容图文
![c# – 如何检查密码重置令牌是否已过期?](/upload/InfoBanner/zyjiaocheng/820/12a190d7abdf454c8fc2cf3cc87bd4ed.jpg)
我正在使用ASP.NET身份,我有基本的忘记密码/重置密码功能.
当您填写忘记密码的表单时,它会使用_userManager.GeneratePasswordResetTokenAsync(user)创建重置令牌
[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);
}
在您尝试重置密码之前,它实际上不会检查令牌是否有效,并且它调用_userManager.ResetPasswordAsync(user,model.Code,model.Password)
我希望能够验证代码在点击重置密码页面时仍然有效,以便向用户显示消息,而不是在他们尝试重置密码后.
有没有办法检查它是否有效?
解决方法:
如果检查UserManager.ResetPasswordAsync(...)方法,请跟踪到VerifyUserTokenAsync方法,该方法只是:
// Make sure the token is valid
var result = await _tokenProviders[tokenProvider].ValidateAsync(purpose, token, this, user);
你也可以自己做,知道:
>您可以向DI框架(例如通过您的控制器构造函数)询问您的情况的令牌提供程序;
>目的只是the hardcoded "ResetPassword" string;
>令牌是用户正在使用的代码;
>您应该能够获得的用户取决于您的视图,电子邮件,网址和其他任何设置(默认示例不包括我认为,但您可以轻松地将user.Id放入“忘记密码网址“在令牌本身之前,并在需要时提取它”.
然后您可以自己调用ValidateAsync并相应地调整视图.
内容总结
以上是互联网集市为您收集整理的c# – 如何检查密码重置令牌是否已过期?全部内容,希望文章能够帮你解决c# – 如何检查密码重置令牌是否已过期?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。