【发布时间】:2022-01-08 01:23:16
【问题描述】:
我正在使用带有 .NET 5 的脚手架身份。我尝试了登录页面上的“忘记密码”链接。这样做是因为发送的电子邮件中包含重置密码的链接。
但是,单击电子邮件中的链接会导致与格式错误的 base 64 代码相关的错误。输入格式错误:321 是无效输入。
base 64 代码存在,但存在问题。 base 64 代码是这样生成的:
var code = await _userManager.GeneratePasswordResetTokenAsync(user);
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
var callbackUrl = Url.Page(
"/Account/ResetPassword",
pageHandler: null,
values: new { area = "Identity", code },
protocol: Request.Scheme);
await _emailSender.SendEmailAsync(
Input.Email,
"Reset Password",
$"Please reset your password by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
它在 ResetPassword.cshtml.cs GET 上中断。
if (code == null)
{
return BadRequest("A code must be supplied for password reset.");
}
else
{
Input = new InputModel
{
Code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code))
};
return Page();
}
谁能指出我解决这个问题的正确方向?我不确定它是否相关,但我使用的是 SendGrid 的 SMTP 服务器。
更新。我发现代码末尾有一个尾随逗号。删除它可以解决问题。
code = code.Replace("'", "");
现在我只需要找出它是如何到达那里的。
【问题讨论】: