确认电子邮件中的aspnet身份无效令牌

 黄宗翰琼琦莉雯 发布于 2022-12-04 23:47

我正在尝试确认帐户,但我收到"无效令牌".错误.

这是我正在尝试的:

var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmacaoEmail", "Usuario", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);

await UserManager.SendEmailAsync(user.Id, "Ativação de Conta", user.GetEmailAtivacao(model.Nome, callbackUrl));

如果我UserManager.ConfirmEmailAsync在此代码后拨打电话,我可以确认该帐户.但是,如果我打开它在变量callbackUrl中的链接并尝试通过该操作确认,我收到错误.

我认为它可能是OwinContext的东西,所以我决定打电话HttpContext.GetOwinContext().GetUserManager但是我得到了同样的错误.

有线索吗?

2 个回答
  • 我遇到了同样的问题.我用以下代码解决了这个问题.

    样品:

    var emailToken = _customManager.GenerateEmailConfirmationToken(userId);
    emailToken = emailToken.Base64ForUrlEncode();
    

    扩展方法=>名称空间:System.Text,System.Web

    public static class UrlEncoding
    {
            public static string Base64ForUrlEncode(this string str)
            {
                byte[] encbuff = Encoding.UTF8.GetBytes(str);
                return HttpServerUtility.UrlTokenEncode(encbuff);
            }
    
            public static string Base64ForUrlDecode(this string str)
            {
                byte[] decbuff = HttpServerUtility.UrlTokenDecode(str);
                return Encoding.UTF8.GetString(decbuff);
            }
    }
    

    2022-12-11 02:09 回答
  • 很可能是传输中的代码被浏览器修改.尝试在令牌上执行UrlEncode:

    var code = await userManager.GenerateEmailConfirmationTokenAsync(userId);
    code = System.Web.HttpUtility.UrlEncode(code);
    

    否则,浏览器会混淆令牌中可能出现的特殊符号.

    2022-12-11 03:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有