如何修复 ASP.NET 身份电子邮件确认中的"无效令牌"



我正在尝试让确认电子邮件验证一个新的用户帐户。令牌是创建并通过电子邮件发送给用户的,该用户接收带有链接以验证帐户的电子邮件。当用户单击链接时,我将获得无效的令牌。

它托管在Godaddy上(不确定是否有任何区别(

在调试代码时,我发现要发送到验证的令牌最初是相同的,而现在的较低者可以是问题吗?

生成令牌和电子邮件的代码

private async Task<string> SendEmailConfirmationTokenAsync(string userID, string subject)
{
   string _code = await UserManager.GenerateEmailConfirmationTokenAsync(userID); 
   var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = userID, code = _code }, protocol: Request.Url.Scheme);
   await UserManager.SendEmailAsync(userID, subject, "Please confirm your account by clicking <a href="" + callbackUrl + "">here</a>");
   return callbackUrl;
}

确认令牌/电子邮件:

[AllowAnonymous]
public async Task<ActionResult> ConfirmEmail(string userId, string code)
{
    if (userId == null || code == null)
    {
        return View("Error");
    }
    var result = await UserManager.ConfirmEmailAsync(userId, code);
    if (result.Succeeded)
    {
        return RedirectToAction("Create", "Users", new { id = userId });
    }
    AddErrors(result);
    ViewBag.errorMessage = "Error: " + result.Errors;
    return View("Error");
}

我也将MachineKey添加到Web.config。

<machineKey validationKey="key" decryptionKey="key" validation="SHA1" decryption="AES" />

我一直都会收到错误令牌

在通过电子邮件发送之前编码您的代码:

private async Task<string> SendEmailConfirmationTokenAsync(string userID, string subject)
{
   string _code = await UserManager.GenerateEmailConfirmationTokenAsync(userID); 
     _code = HttpUtility.UrlEncode(_code);
   var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = userID, code = _code }, protocol: Request.Url.Scheme);
   await UserManager.SendEmailAsync(userID, subject, "Please confirm your account by clicking <a href="" + callbackUrl + "">here</a>");
   return callbackUrl;
}

这是令人难以置信的,但是解决方案是创建一个新项目并将所有项目带入其中。

我认为当VS创建引起问题的项目时发生了一些事情。

感谢所有HALP

相关内容

  • 没有找到相关文章