于是我按照这里的说明进行了操作。https:/docs.microsoft.comen-usaspnetcoresecurityauthenticationaconfirm?view=aspnetcore-3.1&tabs=visual-studio。
我的应用程序可以工作,并使用我设置的电子邮件服务发送账户确认电子邮件,但如果我去重置密码,身份服务没有调用电子邮件服务发送电子邮件指示。
但是,如果我去重置密码,身份服务并没有调用电子邮件服务来发送电子邮件指示。我到底做错了什么?
为什么身份服务知道如何使用电子邮件来确认帐户,但不能使用它来重置密码?
为了解情况
startup.cs
// requires
services.AddTransient<IEmailSender, EmailSender>();
services.Configure<AuthMessageSenderOptions>(Configuration);
EmailSender.cs
public class EmailSender:IEmailSender
{
public EmailSender(IOptions<AuthMessageSenderOptions> optionsAccessor)
{
Options = optionsAccessor.Value;
}
public AuthMessageSenderOptions Options { get; } //set only via Secret Manager
public Task SendEmailAsync(string email, string subject, string message)
{
return Execute(Options.SendGridKey, subject, message, email);
}
public Task Execute(string apiKey, string subject, string message, string email)
{
var client = new SendGridClient(apiKey);
var msg = new SendGridMessage()
{
From = new EmailAddress("[email protected]", Options.SendGridUser),
Subject = subject,
PlainTextContent = message,
HtmlContent = message
};
msg.AddTo(new EmailAddress(email));
// Disable click tracking.
// See https://sendgrid.com/docs/User_Guide/Settings/tracking.html
msg.SetClickTracking(false, false);
return client.SendEmailAsync(msg);
}
}
我们遇到了同样的问题,发现注册邮件正在发送,而密码重置邮件却没有。在我们的情况下,这是由于两个问题,即 AspNetUsers
表。
EmailConfirmed
数据库中的bool,以 True
和Email
和 NormalizedEmail
没有设置,而是留下了 null
.一旦我们填充了缺失的电子邮件字段,并运行确认步骤--或者手动将标志改为 True
-密码重置邮件开始工作。