【问题标题】:Aspnet Core 3.1 Identity ConfirmEmail not working as expectedAspnet Core 3.1 Identity ConfirmEmail 未按预期工作
【发布时间】:2020-04-25 09:20:06
【问题描述】:

我正在使用 aspnet 核心托管的 blazor wasm 项目类型。我正在尝试通过发送给用户的电子邮件链接来确认用户帐户。

正在生成并发送电子邮件。生成的确认链接是: https://localhost:5001/accountconfirmation?code=CfDJ8L2gJclnoq5BioPxBNdLc8wCyaMHcitemYm7I8XKkey+M+vauvFOj0HN1meMs6JusAIMNd8gFCe/e8U0w3MMa0blmDzAMqrXGHvekYo5iPGeFlzLrY2guPO1iwAhUlQJ4t6ZRk5ieyGcgREID/9G8rwJKYC+Ct4WXtQiyfywGpixo63Y4B4hNdQquQE5trdzF0bOyeq2lJhbAlhe5TnsnGqiKbJq60oCuR07M/Gcp9URBLPYVCbG7Ymi+4BUUCRA/Q==&userId=5742c1f1-7957-4154-b12d-5e6e3eaebd0f

单击电子邮件链接时,用户将导航到 Blazor 前端 web 应用程序,然后该应用程序将查询字符串参数发布到 AccountsController 操作。在控制器操作中正确接收值。

我希望此操作方法可以将帐户设置为已确认,但事实并非如此。我也尝试了对代码进行 URL 编码,但仍然没有成功。userId 是一个 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;
    }

【问题讨论】:

  • 你调试result了吗?它应该有更多的细节

标签: asp.net-core asp.net-identity blazor


【解决方案1】:

尝试添加 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

【讨论】:

  • 嗨迈克尔,我添加了你的代码,但仍然失败:Microsoft.AspNetCore.Identity.SignInManager[0] => RequestPath:/api/login RequestId:0HLSKEIVKDL56:000000E7, SpanId:|e90a55c7-428f5fcd34ea0053。 , TraceId:e90a55c7-428f5fcd34ea0053, ParentId: => CommunityApp.Server.Controllers.LoginController.Login (CommunityApp.Server) 用户 7de630a5-51a0-4ad5-9f78-94d304df263c 在没有确认电子邮件的情况下无法登录。
  • 我唯一能建议的就是拉下我的项目并运行它。也许我创建令牌的方式就是为什么它对我有用?
  • 在这个页面上我调用 Base64UrlEncode github.com/ADefWebserver/Blazor-Blogs/blob/master/BlazorBlogs/…
  • 嗨迈克尔 - 我使用了你的确切代码,它开始工作 - 再次感谢
  • 所以这两段代码一起是: ENCODING : var code = await userManager.GenerateEmailConfirmationTokenAsync(user); code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));和解码:code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
猜你喜欢
  • 2020-10-06
  • 1970-01-01
  • 2020-11-14
  • 2020-12-30
  • 2018-02-04
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 2022-07-08
相关资源
最近更新 更多