M.T*_*zil 15 c# asp.net asp.net-mvc .net-core asp.net-core-2.1
我正在使用asp.net核心身份2.1,我有一个随机的电子邮件确认问题,虽然电子邮件确认有时会说result.Error = InvalidToken.令牌也未过期.
注意:我们使用多个服务器,并且我们还将密钥存储在一个位置,以便所有服务器使用相同的密钥.
用于确认电子邮件的代码段.
邮件确认
var confCode = await _userManager.GenerateEmailConfirmationTokenAsync(user);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new
{
userId = user.Id,
code = WebUtility.UrlEncode(confCode)
}, protocol: HttpContext.Request.Scheme);
string confirmationEmailBody = string.Format(GetTranslatedResourceString("ConfirmationEmailBody"), "<a href='" + callbackUrl + "'>") + "</a>";
Run Code Online (Sandbox Code Playgroud)
验证令牌
public async Task<bool> ConfirmEmailAsync(string userId, string code)
{
if (string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(code))
return false;
var user = await _userManager.FindByIdAsync(userId);
if (user == null)
return false;
var result = await _userManager.ConfirmEmailAsync(user, code).ConfigureAwait(false);
if (!result.Succeeded)
result = await _userManager.ConfirmEmailAsync(user, WebUtility.UrlDecode(code)).ConfigureAwait(false);
return result.Succeeded;
}
Run Code Online (Sandbox Code Playgroud)
令牌无效
以下令牌编码两次,但我们处理这种情况
CfDJ8HYrrpCgcr5GvrItPOWapXRy8WF8odd%252BVKuDup7buRsl1x4agRpfgQlEIPWiBqM0Wuilu9tCv5l%252B3lNaAb89%252Fi%252B4k0y%252FH0jdXAbabz0%252FXDGA0eUrmcKdIsDFNuXeyP5ezTVmTx8t0ky9xCTXaKLAfvTsCJviETk5Ag9JbUs3l3%252BnUon6fyYOHsslJI5VKLqhMM0Sm%252BW1EE%252B%252FPEJ%252BXcn%252FPS1My%252BI1lExuF1R1hFEZScEsUCG%252Bx%252BVIFB9bzs1IoLC%252Baw%253D%253D
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,谢谢!
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |