【问题标题】:Issue with Asp.net identity Email Confirmation Token: "Invalid Token"Asp.net 身份电子邮件确认令牌问题:“无效令牌”
【发布时间】:2018-03-19 12:47:38
【问题描述】:

我正在使用 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 发送给用户。当我调试代码时,我看到以下值:

代码: “GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh + 02TK4R + lhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe + 9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd / SJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF” P>

codeHtmlVersion: “GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh%2b02TK4R%2blhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe%2b9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd%2fSJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF” P>

然后在我的 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” P>

codeHtmlVersion: “GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh%252b02TK4R%252blhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe%252b9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd%252fSJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF” P>

因此可以看出我的代码正在以某种方式发生变化,因此用户收到“无效令牌”错误消息。有人可以帮我弄清楚我在这里做错了什么吗?非常感激。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-identity asp.net-identity-2


    【解决方案1】:

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

    string codeHtmlVersion = HttpUtility.UrlDecode(code);

    分析你的令牌是如何变化的:

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

    【讨论】:

    • 非常感谢。愚蠢的错误,但你帮我省了很多麻烦!
    【解决方案2】:

    以下代码对我有用:

     HttpUtility.HtmlDecode(code);
    

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 2015-02-16
      • 2015-02-15
      • 2015-08-17
      • 1970-01-01
      • 2015-04-08
      • 2020-08-07
      • 2015-10-08
      • 2016-12-11
      相关资源
      最近更新 更多