代码之家  ›  专栏  ›  技术社区  ›  user8013875

确认电子邮件时,ASP.NET核心令牌无效,但令牌似乎有效

  •  1
  • user8013875  · 技术社区  · 7 年前

        var result = await userManager.ConfirmEmailAsync(user, code);
    

    正在生成令牌:

            var code = await userManager.GenerateEmailConfirmationTokenAsync(user);
            var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme);
            var email = user.Email;
            await emailSender.SendEmailConfirmationAsync(email, callbackUrl);
    

    EmailConfirmationLink()和sendmailconfirmationAsync()方法:

        public static string EmailConfirmationLink(this IUrlHelper urlHelper, string userId, string code, string scheme)
        {
            var result = urlHelper.Action(
                action: "ConfirmEmail",
                controller: "ApplicationUsers",
                values: new { userId, code },
                protocol: scheme);
    
            return result;
        }
    
        public static Task SendEmailConfirmationAsync(this IEmailSender emailSender, string email, string link)
        {
            return emailSender.SendEmailAsync(email, "Confirm your email",
                $"Please confirm your account by clicking this link: <a href='{HtmlEncoder.Default.Encode(link)}'>Confirm email</a>");
        }
    

    ConfirmEmail()方法:

        public async Task<IActionResult> ConfirmEmail(string userId, string code)
        {
                if (userId == null || code == null)
                {
                    // ....
                }
                var user = await userManager.FindByIdAsync(userId);
                if (user == null)
                {
                    throw new ApplicationException($"Unable to load user with ID '{userId}'.");
                }               
                var result = await userManager.ConfirmEmailAsync(user, code);
    
    0 回复  |  直到 7 年前