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

使用两个项目通过电子邮件确认身份(一个用于发送令牌,另一个用于确认)

蒋鸿文
2023-03-14

我在ASP. NET core 3.1应用程序中使用身份电子邮件确认时遇到问题。

我有一个Web API项目,它接收注册用户的请求。这样,我就生成了一个用于确认的令牌并将该令牌发送到用户的电子邮件。但是,电子邮件中配置的供他执行确认的URL来自Web项目,当我确认用户时,应用程序会显示错误消息,说明令牌无效,即使对两个应用程序使用相同的数据库-此外,我还对这些应用程序使用共享身份项目。

发送的令牌是正确的,因为当比较API发送的令牌和Web接收的令牌时,它是相同的令牌,但当调用方法来确认电子邮件时,返回的消息表示令牌无效。

生成要确认的令牌(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);

令牌确认(WEB项目)

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();
}

共有1个答案

罗奇文
2023-03-14

据我所知,usermanger ConfirmEmailAsync将根据其数据保护提供者对令牌进行解密。

通常,不同的项目将使用不同的数据保护提供商。如果您的两个应用程序都是asp。net核心应用程序。

我建议您可以尝试使用以下代码连接到同一个外部存储并使用相同的应用程序名称。外部存储可以是网络位置、映射驱动器、Azure Key Vault等。

如果您处于开发模式,可以将它们设置为相同的路径。

在启动时添加以下代码。cs配置服务方法:

 //Make sure the app name and path is same.
services.AddDataProtection()
    .SetApplicationName("shared app name")
    .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"));

更多详细信息,请参阅本文。

 类似资料:
  • 问题内容: 我经历了太多的代码,试图找出我做错了什么,但我却步履蹒跚,浪费时间。这将非常简单,但我无法弄清楚。 我正在开发一个Android应用程序,需要将2个微调器放在一个活动上。第二个微调器将根据第一个微调器上选择的条目进行填充。听起来很简单吧? 所以这就是我想做的。如果用户选择Mobile,则应显示中的内容,当用户选择Large business 时应运行,最后一个条目应调用。我得到的只是一

  • 我在ASP. Net Core中工作,并尝试从gmail使用smtp客户端发送电子邮件。有以下代码,但不起作用也看过以下帖子,但不起作用http://dotnetthoughts.net/how-to-send-emails-from-aspnet-core/ 它会跟踪错误 系统NotSupportedException:SMTP服务器不支持身份验证

  • 我在使用我的公司交换服务器通过Javamail发送电子邮件时遇到了一些问题。我们有一个应用程序通过gmail服务器发送电子邮件没有任何问题,但对于Google策略的一些更改,我们希望使用公司服务器来完成这项工作。我确信会话属性中的问题,但我无法找到使其工作的方法 这是显示日志的错误 javax.mail.MessagingException:无法连接到SMTP主机:mail.company.com

  • 这是我通过zohomail发送电子邮件的bean配置 当我运行我的程序我得到以下错误 组织。springframework。邮政MailSendException:消息失败后无法关闭服务器连接;嵌套的异常是javax。邮政MessaginException:无法向SMTP主机发送命令;嵌套的例外是:java。网SocketException:远程主机关闭的连接。失败消息:com。太阳邮政smtp。

  • 问题内容: 我想为手机开发gtalk应用程序 请告诉我用于访问J2ME的gmail帐户的库的名称 问题答案: 您的Question标题说您要访问gmail电子邮件,但在说明中说要开发gtalk应用程序。 如果您正在寻找gtalk客户端开发,请查看以下资源 为什么需要为手机开发gtalk客户端,已经有很多gtalk了。要学习,您可以尝试使用开源应用程序来开始。 MGtalk:用于移动项目的Googl

  • 我有以下xml文件结构: 我的目标是借助xslt文件生成html输出。在这样做的过程中,我想应用一个模板来指导根元素的子元素,该元素将标记的名称输出为标题1,其内容包含在 为了更容易理解我想要的是HTML输出的示例: 现在,我的尝试如下所示:http://pastebin.com/wKgSLbcE 但它不适用于