电子邮件更改 - 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 生成的!
还有为什么它对其他人有用?这对任何人都不适用!
我在 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 生成的! 还有为什么它对其他人有用?这对任何人都不适用!