问题与Asp.net身份确认电子邮件令牌:“无效令牌”
我使用asp.net的身份,并在我的帐户,下面的部分代码/注册方法:问题与Asp.net身份确认电子邮件令牌:“无效令牌”
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用户在电子邮件中。当我调试的代码,我看到了以下值:
代码: “GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh + 02TK4R + lhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe + 9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd/SJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF”
codeHtmlVersion: “GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh%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);
....
}
当用户点击从他的电子邮件中的确认链接,在我的调试会话时,我看到了以下值:
代码: “GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh%2b02TK4R%2blhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe%2b9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd%2fSJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF”
codeHtmlVersion: “GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh%252b02TK4R%252blhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe%252b9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd%252fSJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF”
因此,可以看到我的代码以某种方式改变,因此用户收到“无效令牌”错误消息。有人能帮我弄清楚我在这里做错了什么吗?非常感激。
您编码第二遍的时候,你想在ConfirmEmail
string codeHtmlVersion = HttpUtility.UrlDecode(code);
进行解码分析如何使你的令牌得到改变:
-
+
编码后首次成为%2b
-
%2b
在第二次编码后变成%252b
(它编码 %符号为%25)
非常感谢。愚蠢的错误,但你救了我很多头痛! –