【发布时间】:2021-04-10 06:20:20
【问题描述】:
我有一个 .net 核心 Blazor 项目,我已将 Identity 搭建到项目中。我已自定义 IdentityUser 以使用整数 ID 而不是默认值。
我在通过默认确认电子邮件的功能上遇到了一个奇怪的问题 https://localhost:44348/identity/account/manage/email 页面
这个内置页面有一个按钮,可以发布到 OnPostSendVerificationEmailAsync,如下所示:
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", HtmlEncoder.Default.Encode(callbackUrl));
//await _emailSender.SendEmailAsync(
// email,
// "Confirm your email",
// $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
StatusMessage = "Verification email sent. Please check your email.";
return RedirectToPage();
}
我对该函数进行了细微的修改,但是这些更改不应影响回调 URL 生成的默认机制。基本上,这会生成一个电子邮件确认 URL,并向指定的用户帐户发送一封电子邮件。
我收到以下生成的邮箱 URL:
的https://本地主机:44348 /身份/帐户/ ConfirmEmail用户id = 1&代码= Q2ZESjhQcXM4RmJpR2xGT3I2NW41SUkxT0pXWnI5WlE5TUlhUndzSi9aQnA1ZGN4OTc5ZS9UOFFiR2xranhidFBWWTU2c3AxZ25peUYvamFaVUVhbG5ac3ArcHh5WkVNMVczUHVDQVBqMVdXUUFFeGdwU1FWZXo1eUxSVHZUU3dwb2RpUGVpTFhCTzhJSjhHR3ZpckVYNUZQMVJrUGhUU1FQOE52TnVWdU9jYVBKbXIyTkY4V05NVVhrVXVid2xQRFJzSTFRPT0 P>
但是,问题是目标 ConfirmEmail 没有正确绑定 userId 和 code。代码部分为空。
任何我在这里看不到的关于房间里大象的好主意将不胜感激。谢谢。
然而,代码为空
【问题讨论】:
-
将此添加为评论仅供将来参考但是,我还没有弄清楚解决方案是什么。显然这已被报告为错误 - github.com/dotnet/aspnetcore/issues/2152
标签: c# asp.net-core blazor identity