如何解决ASP .Net Identity确认电子邮件不起作用
我正在尝试建立注册和登录系统,并且一切正常。我还尝试创建“确认电子邮件”选项,该选项将在您尝试注册时确认您的电子邮件,但参数: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和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机密工具添加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中的指南。只需确保SendGridUser和SendGridKey获取值即可。
------不得在生产中使用此产品------
如果您只想在没有控制台命令的情况下快速进行测试,则可以“作弊”并添加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();
然后它将仅对缺省值进行硬编码,而不是检查秘密存储。但是不要将其投入生产! :)以便您可以测试东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。