asp.net-mvc - 如何在 Asp.Net Core MVC 中重置密码之前验证用户令牌是否有效?
问题描述
我正在为我的应用程序使用 Asp.net 核心 MVC,并且我实现了重置密码功能,它工作正常。让我展示一下它是如何实现的。当用户请求重置密码时,应用程序会创建一个令牌,如下所示:
var token = _userManager.GeneratePasswordResetToken(user);
应用程序向用户发送一封电子邮件,当用户点击链接时,它会出现在用户重置密码的页面上。我正在重置如下:
ChangePasswordAsync(user, token, password);
它工作正常。但我想在更改密码之前验证令牌是否有效。有什么办法吗?
解决方案
UserManager
有一个公共方法,VerifyUserTokenAsync
这很可能是你所追求的。如果你在这里查看源代码,你会看到它是如何在里面使用的ResetPasswordAsync
:
VerifyUserTokenAsync(user, Options.Tokens.PasswordResetTokenProvider, ResetPasswordTokenPurpose, token)
因此,它依赖于一个魔术字符串,但您应该能够使用相同的值来获取真值或假值,例如:
if(await _userManager.VerifyUserTokenAsync(user, _userManager.Options.Tokens.PasswordResetTokenProvider, "ResetPassword", token))
{
await _userManager.ResetPasswordAsync(user, token, password);
}
else
{
// handle a bad token however you see fit...
}
这未经测试,所以我不能保证它按原样工作。
推荐阅读
- python - Numpy 不安装
- sql - 根据条件在 SQL Server 中填充一行(查询优化)
- r - R如何从尺寸数据生成尺寸类
- python - Discord 机器人命令执行多次
- git - 使用 git diff 生成补丁文件
- c++ - Windows 10 IoT 嵌入式,尝试使用 Visual Stuido 2019 调试/部署控制台应用程序
- python - 使用存储在 csv 中的 Scrapy 抓取 URL
- ruby-on-rails - Ruby On Rails ---- 尝试在 json 中发送错误信息
- amazon-web-services - AWS Elastic Beanstalk - how to stop previous docker before starting new one
- python - Python pandas 当我加载一个csv文件时,函数“iterrow”并没有真正起作用