我在 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..
}
uj5u.com熱心網友回復:
該方法中的“代碼”被錯誤解碼(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 生成的!還有為什么它適用于其他人?這不應該對任何人有效!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/344865.html
標籤:asp.net核心 验证 西装外套 blazor 服务器端
