【发布时间】:2021-02-04 23:47:10
【问题描述】:
我在 ASP.NET core 3.1 应用程序中使用身份电子邮件确认时遇到问题。
我有一个接收注册用户请求的 Web API 项目。这样,我生成一个用于确认的令牌并将该令牌发送到用户的电子邮件。但是,电子邮件中为他执行确认而配置的 URL 来自 Web 项目,当我确认用户时,应用程序会显示错误消息,指出即使对两个应用程序使用相同的数据库,令牌也是无效的 - 在此外,我还为这些应用程序使用了一个共享身份项目。
发送的token是正确的,因为API发送的和Web收到的比较是同一个token,但是调用方法确认email时,返回的是token的消息无效。
生成令牌以确认(API 项目)
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
var callbackUrl = $"https://localhost:5001/Identity/Account/ConfirmEmail?userId={user.Id}&code={code}";
var confirmationUrl = HtmlEncoder.Default.Encode(callbackUrl);
令牌确认(网络项目)
public async Task<IActionResult> OnGetAsync(string userId, string code)
{
if (userId == null || code == null)
{
return RedirectToPage("/Index");
}
var user = await _userManager.FindByIdAsync(userId);
if (user == null)
{
return NotFound();
}
code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
var result = await _userManager.ConfirmEmailAsync(user, code);
StatusMessage = result.Succeeded ? "Email confirmed" : "Error to confirm email.";
return Page();
}
【问题讨论】:
标签: asp.net-core asp.net-identity identity