尝试使用身份方法确认电子邮件时未收到确认代码。 ASP.NET 核心 MVC

Not getting Confirmation code while trying to confirm emails using Identity methods. ASP.NET Core MVC

当我尝试向用户发送确认电子邮件然后单击提供的 link 时,我得到了当前的用户 ID,但没有像令牌之类的“代码”,这里是 类:

ConfirmEmail.cshtml.cs

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.WebUtilities;
using System.Text;
using System.Threading.Tasks;

namespace RandApp.Areas.Identity.Pages.Account
{
    [AllowAnonymous]
    public class ConfirmEmailModel : PageModel
    {
        private readonly UserManager<IdentityUser> _userManager;

        public ConfirmEmailModel(UserManager<IdentityUser> userManager)
        {
            _userManager = userManager;
        }

        [TempData]
        public string StatusMessage { get; set; }

        public async Task<IActionResult> OnGetAsync(string userId, string code)
        {
            if (userId == null || code == null)
            {
                return RedirectToPage("/Index");
            }

            var user = await _userManager.FindByIdAsync(userId);
            if (user == null)
            {
                return NotFound($"Unable to load user with ID '{userId}'.");
            }

            code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
            var result = await _userManager.ConfirmEmailAsync(user, code);
            StatusMessage = result.Succeeded ? "Thank you for confirming your email." : "Error confirming your email.";
            return Page();
        }
    }
}

有一个发送 callBackUrl 的方法,这个方法(上面提到的)应该从中获取“代码”,但它没有。

Email.cshtml.cs

public async Task<IActionResult> OnPostSendVerificationEmailAsync()
        {
            var user = await _userManager.GetUserAsync(User);
            if (user == null)
            {
                return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
            }

            if (!ModelState.IsValid)
            {
                await LoadAsync(user);
                return Page();
            }

            var userId = await _userManager.GetUserIdAsync(user);
            var email = await _userManager.GetEmailAsync(user);
            var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
            code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
            var callbackUrl = Url.Page(
                "/Account/ConfirmEmail",
                pageHandler: null,
                values: new { area = "Identity", userId = userId, code = code },
                protocol: Request.Scheme);
            await _emailSender.SendEmailAsync(
                email,
                "Confirm your email",
                $"Please confirm your account {HtmlEncoder.Default.Encode(callbackUrl)}");

            StatusMessage = "Verification email sent. Please check your email.";
            return RedirectToPage();
        }

那么问题出在哪里或者这个“userId”(OnGetAsync 方法的参数)甚至来自哪里,我的意思是如果我得到 userId,“代码”参数有什么问题?

问题出在这个“代码”的编码上。在我从方法中删除它们后它工作正常,但这是删除它们的最佳方法吗?因为如果它不需要在方法中,它就不会。