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

asp net核心确认电子邮件不工作

路金鑫
2023-03-14

我想为新用户设置一封确认电子邮件。

[HttpGet]
    [AllowAnonymous]
    public async Task<IActionResult> ConfirmEmail(string userId, string code)
    {
        if (userId == null || code == null)
        {
            return RedirectToAction(nameof(HomeController.Index), "Home");
        }
        var user = await _userManager.FindByIdAsync(userId);
        if (user == null)
        {
            throw new ApplicationException($"Unable to load user with ID '{userId}'.");
        }
        var result = await _userManager.ConfirmEmailAsync(user, code);
        return View(result.Succeeded ? "ConfirmEmail" : "Error");
    }

所以当调试时,单击链接时,userId是可以的,但“code”输入参数为空,所以

if (userId == null || code == null)

是真的,然后执行

return RedirectToAction(nameof(HomeController.Index), "Home");

发送给注册用户的电子邮件如下所示:

请单击此链接确认您的帐户:https://localhost:44314/Account/ConfirmEmail?userId=3ec7ac6a-3329-4821-a09b-aa4843598eaa

编辑:链接包含

实际上,没有人在互联网上有同样的问题,所以我在这里迷路了。我做错了什么?

public static class UrlHelperExtensions
{
    public static string EmailConfirmationLink(this IUrlHelper urlHelper, string userId, string code, string scheme)
    {
        return urlHelper.Action(
            action: nameof(AccountController.ConfirmEmail),
            controller: "Account",
            values: new { userId, code },
            protocol: scheme);
    }

    public static string ResetPasswordCallbackLink(this IUrlHelper urlHelper, string userId, string code, string scheme)
    {
        return urlHelper.Action(
            action: nameof(AccountController.ResetPassword),
            controller: "Account",
            values: new { userId, code },
            protocol: scheme);
    }
}

更新:当我改变

共有2个答案

卫高谊
2023-03-14

如上所述,该代码:

HtmlEncoder.Default.Encode(link)

是错误的。我们不是在这里编码HTML。我们正在编码一个url。因此,有人会认为,我们应该使用url编码。这:

HttpUtility.UrlEncode(link);

但是,似乎Url。页面足够聪明,可以自动对参数进行编码。试试下面的代码:

var callbackUrl = Url.Page(
            "/Account/ConfirmEmail",
            pageHandler: null,
            values: new { area = "Identity", userId = "12345", code = 
"567&9", returnUrl = "/index" },
            protocol: Request.Scheme);

结果是这样的:

https://localhost:44383/Identity/Account/ConfirmEmail?userId=12345&code=567%269&returnUrl=%2Findex

正如您所见,“code”参数中的符号和正在被编码。因此编码是不必要的,琼斯的回答是正确的。

微生烨然
2023-03-14
public static Task SendEmailConfirmationAsync(this IEmailSender emailSender, string email, string link)
    {
        return emailSender.SendEmailAsync(email, "Confirm your email",
            $"Please confirm your account by clicking this link: <a href='{HtmlEncoder.Default.Encode(link)}'>link</a>");
    }

问题就在这里

HtmlEncoder.Default.Encode(link)

只要把它移开就行了

<a href='{link}'>link</a>
 类似资料:
  • 此API适用于移动应用程序。目标是让用户在注册时确认电子邮件。当用户注册时,会生成一个确认链接并通过电子邮件发送。我在MVC项目中也采用了同样的方法,效果很好,但在Web API项目中,它似乎无法实现。现在,当用户单击该链接时,应该点击相应的动作方法并完成任务。 唯一的问题是,ConfirmEmail操作方法在单击确认链接时没有被触发,尽管它看起来很好。 以下是可能有帮助的主要配置 MVC服务配置

  • 我已经建立了一个ASP。具有身份的NET Core 5 web应用程序。一切正常。唯一的问题是,当新用户在他们的电子邮件确认中点击链接后,网站上显示的消息是“确认电子邮件”。确认有效,但消息让用户感到困惑。 发送到的地址是: https://Baseurl/身份/帐户/确认Email? userId=******** Identity/Account文件夹中的任何文件都不包含显示的邮件。是否可以更

  • 我使用的是firebase javascript API。 也不起作用

  • 我使用的是aspnet core托管的blazor wasm项目类型。我正试图通过发送给用户的电子邮件链接确认用户帐户。 正在生成并发送电子邮件。生成的确认链接为:https://localhost:5001/accountconfirmation?code=CfDJ8L2gJclnoq5BioPxBNdLc8wCyaMHcitemYm7I8XKkeyM vauvFOj0HN1meMs6JusAI

  • 我正在使用spring Boot从java发送HTML电子邮件。电子邮件包括签名与我们公司的形象标志。它工作得很好。在Gmail上。但在MacOS应用程序电子邮件中,徽标是作为附件发送的,而不是内联的。 代码的非相关部分替换为...

  • 主要内容:创建用户,登录,注销在本章中,我们将向您介绍如何使用Firebase电子邮件/密码身份验证。在开始之前,需要设置登录方法,参考以下图所示 - 点击设置登录方法,然后选择电子邮件地址/密码,打开启用并保存,如下图所示 - 创建用户 要验证用户,可以使用方法。 示例 让我们来看看下面的一个例子。参考代码 - 接下来,您可以检查Firebase仪表板中的数据库,并查看用户是否已创建成功。如下所示,已经创建了一个用户账号 -