我正在使用aspnet core托管的blazor wasm项目类型。我正在尝试通过发送给用户的电子邮件链接确认用户帐户。
正在生成和发送电子邮件。生成的确认链接为: https://localhost:5001/accountconfirmation?code=CfDJ8L2gJclnoq5BioPxBNdLc8wCyaMHcitemYm7I8XKkey+M+vauvFOj0HN1meMs6JusAIMNd8gFCe/e8U0w3MMa0blmDzAMqrXGHvekYo5iPGeFlzLrY2guPO1iwAhUlQJ4t6ZRk5ieyGcgREID/9G8rwJKYC+Ct4WXtQiyfywGpixo63Y4B4hNdQquQE5trdzF0bOyeq2lJhbAlhe5TnsnGqiKbJq60oCuR07M/Gcp9URBLPYVCbG7Ymi+4BUUCRA/Q==&userId=5742c1f1-7957-4154-b12d-5e6e3eaebd0f
单击电子邮件链接时,用户将导航到 Blazor 前端 Web 应用,然后将查询字符串参数发布到"帐户控制器"操作。在控制器操作中正确接收值。
我希望此操作方法将帐户设置为已确认,但这并没有发生。我也尝试了对代码进行 URL 编码,但仍然没有成功。用户 ID 是一个 GUID,并作为字符串传递。
[HttpGet]
[Route(Urls.ConfirmAccount)]
public async Task<IdentityResult> Confirm([FromQuery]string code,[FromQuery]string userId)
{
var user = await _userManager.FindByIdAsync(userId);
IdentityResult result = await _userManager.ConfirmEmailAsync(user, code);
return result;
}
尝试添加Base64UrlDecode
[HttpGet]
[Route(Urls.ConfirmAccount)]
public async Task<IdentityResult> Confirm([FromQuery]string code,[FromQuery]string userId)
{
code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
var user = await _userManager.FindByIdAsync(userId);
IdentityResult result = await _userManager.ConfirmEmailAsync(user, code);
return result;
}
这是来自一个工作示例:https://github.com/ADefWebserver/Blazor-Blogs/blob/master/BlazorBlogs/Areas/Identity/Pages/Account/ConfirmEmail.cshtml.cs