我正在尝试使用微软的文档,通过谷歌API设置一个具有身份验证的web应用程序。
我的配置服务如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthentication().AddGoogle(options =>
{
IConfigurationSection googleAuthNSection =
Configuration.GetSection("Authentication:Google");
options.ClientId = googleAuthNSection["ClientId"];
options.ClientSecret = googleAuthNSection["ClientSecret"];
options.CallbackPath = "/oauth2callback";
});
services.AddTransient<IEmailSender, EmailSender>();
}
我已经设置了SendGrid来发送用于激活帐户的邮件。
然而,当我在谷歌API注册帐户时,确认邮件不会发送,我无法激活帐户。当我注册一个只有电子邮件地址的帐户时,这很好。
当我将SignIn.RequireConfirmedAccount
设置为false时,将发送确认邮件。但为什么我必须这么做?对我来说,只有在不需要账户确认的情况下才发送确认邮件是没有意义的。我也不想将此设置为false,因为否则您可以在没有确认的情况下登录。
我正在使用。NET核心3.0
我在使用.netCore 3.1和Blazor服务器端应用程序时遇到了完全相同的问题。相反,SendGrid我使用我的自定义电子邮件发件人,但结果完全相同。只有当我创建本地帐户时才会发送确认电子邮件。通过外部提供商进行身份验证时,不会发送电子邮件,因此无法确认帐户和登录应用程序。
我通过在Startup.cs:中设置这个来修复这个问题
services.AddDefaultIdentity<IdentityUser>(options =>
{
options.SignIn.RequireConfirmedAccount = false;
options.SignIn.RequireConfirmedEmail = true;
})
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
成功了。注册后的用户会自动登录到应用程序,但在他注销并没有确认电子邮件后,不允许再次登录。同样,无论是本地注册的账户还是来自第三方(谷歌、脸书等(的账户,都会通过这种方式发送电子邮件