【发布时间】: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();
}
}
我使用了 c# 标识。
任何建议如何解决这个问题。
提前致谢!
【问题讨论】:
-
从哪里获得
SendGridKey?它可能为空,因为您启动了 2 个新线程,并且您没有保留要传递给该线程的参数 - 顺便说一下,在 Web 应用程序调用中您不需要的线程...... -
首先,请检查 Startup.cs 文件,确保您已经注册了 Email Sender 服务。您可以参考以下文章:Account confirmation and password recovery in ASP.NET Core 和Require Confirmed Email in ASP.NET Core。另外,根据this thread的说法,好像用Sendgrid发邮件,应该使用自己的邮件域。
标签: c# asp.net asp.net-mvc asp.net-core asp.net-identity