当前位置: 首页 > 知识库问答 >
问题:

Aspnet Core 3.1身份确认邮件未按预期工作

傅志诚
2023-03-14

我使用的是aspnet core托管的blazor wasm项目类型。我正试图通过发送给用户的电子邮件链接确认用户帐户。

正在生成并发送电子邮件。生成的确认链接为:https://localhost:5001/accountconfirmation?code=CfDJ8L2gJclnoq5BioPxBNdLc8wCyaMHcitemYm7I8XKkeyM vauvFOj0HN1meMs6JusAIMNd8gFCe/e8U0w3MMa0blmDzAMqrXGHvekYo5iPGeFlzLrY2guPO1iwAhUlQJ4t6ZRk5ieyGcgREID/9g8rwjyc ct4wxtqiyfywgpixo63y4b4hndqqqe5trdzf0boyeq2ljhbalhe5tngqikbjq60ocur07m/gcp9urblpycbg7ymi 4BUUCRA/Q==

当单击电子邮件链接时,用户被导航到Blazor前端webapp,然后将querystring参数发布到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;
    }

共有1个答案

贺靖
2023-03-14

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

 类似资料:
  • 我试图测试spring rabbitmq confirm callback的行为,根据api描述,如果通过consumer发送了任何否定确认,则confirm callback应该给出ack的false值,但在我的例子中总是给出true。即使我将消息发布到deleted队列,我也在confirm回调中获得了true值。请告诉我如何得到否定的承认。 下面是我如何创建RabbitTemplate be

  • 我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它

  • 当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。

  • 我试图使用来传输我根据前面的问题设置的自定义标头。 我在文件中读到... 我的属性包括:

  • 我正在和selenium一起工作,刮一些数据。 有一个按钮在页面上,我正在点击说“Custom_Cols”。这个按钮为我打开了一个窗口,我可以在那里选择我的列。 我的问题是为什么新窗口上的元素不可见,即使我正在等待元素的可见。补充一下,我已经尝试增加延迟时间,但我还是会偶尔出现这个错误。 我的密码在这里