【问题标题】:ASP .Net Identity Confirm email not workingASP .Net 身份确认电子邮件不起作用
【发布时间】:2020-12-25 05:17:15
【问题描述】:

我正在尝试制作注册和登录系统,一切正常。我还尝试制作确认电子邮件选项,该选项将在您尝试注册时确认您的电子邮件,但参数:SendGridKey 和 SendGridUser 始终为空。我应该在哪里插入 API 密钥,我不明白为什么 SendGrid 用户总是为空。

这就是我所说的:

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                var user = new AppUtent { UserName = Input.Email, Email = Input.Email , FirstName = Input.Nome, LastName= Input.Cognome};
                var result = await _userManager.CreateAsync(user, Input.Password);
                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                    code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
                        protocol: Request.Scheme);

                    await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                        $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl });
                    }
                    else
                    {
                        await _signInManager.SignInAsync(user, isPersistent: false);
                        return LocalRedirect(returnUrl);
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

         
            return Page();
        }
    }

Result

我使用了 c# 标识。

任何建议如何解决这个问题。

提前致谢!

【问题讨论】:

标签: c# asp.net asp.net-mvc asp.net-core asp.net-identity


【解决方案1】:

我不知道您的项目进展如何。但是 SendGridKey 和 SendGridUser 都是使用 SendGrid 电子邮件服务发送电子邮件所需要的。

我的猜测是您遵循本指南:Account confirmation and password recovery in ASP.NET Core

所以首先你需要在这里注册:Sendgrid

在第一个链接指南中,他们谈到了创建一个类:

public class AuthMessageSenderOptions
{
    public string SendGridUser { get; set; }
    public string SendGridKey { get; set; }
}

然后在控制台中使用 Dotnet secret 工具添加 SendGridUser 和 SendGridKey,如下所示:

dotnet user-secrets set SendGridUser <Your Sendgrid User>
dotnet user-secrets set SendGridKey <Your Sendgrid key>

然后在你项目的 Startup.cs 中添加:

services.Configure<AuthMessageSenderOptions>(Configuration);

如果您有任何问题,请通读链接 1 中的指南。您的 85% 似乎都在那儿。只需要确保 SendGridUser 和 SendGridKey 获取值。

------ HACK 不要在生产中使用它 ------

如果你只是想在没有控制台命令的情况下快速测试它,你可以“作弊”并像这样添加类 AuthMessageSenderOptions

public class AuthMessageSenderOptions
{
    public string SendGridUser { get; set; } = "<Replace with Sendgrid user>"
    public string SendGridKey { get; set; } = "<Replace with Sendgrid key>"
}

并将其添加为 Startup.cs 中的单例,如下所示:

services.AddSingleton();

然后它只会硬编码默认值,而不是检查秘密存储。但不要在生产中使用它! :) 只是这样你就可以测试东西了。

【讨论】:

  • 谢谢,我已经完成了所有这些步骤。我找不到我的 Sendgrid 用户。应该是我登录的邮箱吧?
  • SendGridUser 和 SendGridKey 是有价值的,但是当我控制我的邮件时,我找不到邮件。
  • 我会检查垃圾邮件文件夹。检查日志是否有异常,如果设置错误,例如错误的用户/密钥。例如。尝试快速发送 5 封邮件,然后检查日志。也许尝试设置一个发送邮件的“测试”ApiController,以便轻松访问以检查是否可以发送任何电子邮件。
猜你喜欢
  • 2021-08-16
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
  • 2018-12-07
  • 2018-04-18
  • 2015-12-13
相关资源
最近更新 更多