电子邮件更改 - InvalidToken

Email Change - InvalidToken

我在 Blazor 服务器应用程序中搭建了帐户管理页面。不幸的是,当我尝试更改用户电子邮件 (Identity/Account/Manage/Email) 时,生成的 link 似乎不正确。

var userId = await _userManager.GetUserIdAsync(user);
var code = await _userManager.GenerateChangeEmailTokenAsync(user, Input.NewEmail);
var callbackUrl = Url.Page(
              "/Account/ConfirmEmailChange",
              pageHandler: null,
              values: new { userId = userId, email = Input.NewEmail, code = code },
              protocol: Request.Scheme);
              await _emailSender.SendEmailAsync(
                        Input.NewEmail,
                        "Confirm your email",
                        $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

当我使用 link 时,会生成无效令牌错误。更糟糕的是,我不知道如何调查该问题。所有其他 links(密码重置、注册后的确认电子邮件)均正常工作。也许这与用户 class 被扩展了一些额外的字段这一事实有关。不过,我对接下来的步骤一无所知。

 public class AspNetUser : IdentityUser
 {
     [StringLength(100)]
     public string FirstName { get; set; }
     [StringLength(100)]
     public string LastName { get; set; }
     //ect..
 }

该方法的“代码”被错误解码 (Base64)

public class ConfirmEmailChangeModel : PageModel {

public async Task<IActionResult> OnGetAsync(string userId,string email,string code)
{
 /*...* 
code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
var result = await _userManager.ChangeEmailAsync(user, email, code);
/*..*/
}
}

删除该行后一切正常! 令我惊讶的是那条线是由 VS 生成的! 还有为什么它对其他人有用?这对任何人都不适用!