我在blazor服务器应用程序中脚手架帐户管理页面。不幸的是,当我试图更改用户电子邮件(身份/帐户/管理/电子邮件)时,生成的链接似乎是不正确的。
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>.");
当我使用该链接时,生成无效令牌错误。更糟糕的是,我不知道如何调查这个问题。所有其他链接(密码重置,注册后确认电子邮件)工作正常。这可能与用户类扩展了一些额外字段的事实有关。但是,我不知道下一步该怎么做。
public class AspNetUser : IdentityUser
{
[StringLength(100)]
public string FirstName { get; set; }
[StringLength(100)]
public string LastName { get; set; }
//ect..
}
"code"方法被错误解码(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生成的!为什么它对其他人也有效?这对任何人都没用!