Asp.net 身份电子邮件确认令牌的问题:"Invalid Token"



我使用的是asp.net身份,在我的Account/Register方法中有以下部分代码:

string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
string codeHtmlVersion = HttpUtility.UrlEncode(code);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = codeHtmlVersion }, protocol: Request.Url.Scheme);

然后我通过电子邮件将callbackUrl发送给用户。当我调试代码时,我看到以下值:

代码:"GE2HDQSSjAboLqEBdBv5rJyksC09o110uqa4Dh+02TK4R+lhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe+9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd/SJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF">

codeHtml版本:"GE2HDQSSjAboLqEBdBv5rTyksC09o110uca4Dh%2b02TK4R%2blhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe%2b9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd%2fSJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF">

然后在我的ConfirmEmail方法中,我反转值(或者我打算这样做):

public async Task<ActionResult> ConfirmEmail(string userId, string code)
{
string codeHtmlVersion = HttpUtility.UrlEncode(code);
var result = await UserManager.ConfirmEmailAsync(userId, codeHtmlVersion);
....
}

当用户点击电子邮件中的确认链接时,在我的调试会话中,我会看到以下值:

代码:"GE2HDQSSjAboLqEBdBv5rTyksC09o110uqa4Dh%2b02TK4R%2blhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe%2b9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd%2fSJpCHdlgRsaAdOqpBPlI4zcdFlbuMxiRdjHJq3q2K12YdQWcCF">

codeHtml版本:"GE2HDQSSjAboLqEBdBv5rTyksC09o110uqa4Dh%252b02TK4R%252blhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe%252b9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd%252fSJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF">

可以看出,我的代码正在以某种方式更改,因此用户收到"无效令牌"错误消息。有人能帮我弄清楚我在这里做错了什么吗?非常感谢。

当您想在ConfirmEmail中解码时,您正在进行第二次编码

string codeHtmlVersion = HttpUtility.UrlDecode(code);

分析您的代币如何更改:

  1. +在第一次编码后变为%2b
  2. %2b在第二次编码后变为%252b(它对%符号到%25)

以下代码对我有效:

HttpUtility.HtmlDecode(code);

相关内容

  • 没有找到相关文章

最新更新