6 c# .net-core asp.net-core asp.net-core-identity
我已经像这样配置了我的身份:
services.AddIdentity<AppUser, IdentityRole>(
opts =>
{
opts.SignIn.RequireConfirmedEmail = true;
opts.Password.RequireDigit = true;
opts.Password.RequireLowercase = true;
opts.Password.RequireUppercase = true;
opts.Password.RequireNonAlphanumeric = false;
opts.Password.RequiredLength = 7;
})
.AddEntityFrameworkStores<MyDbContext>().AddDefaultTokenProviders();
Run Code Online (Sandbox Code Playgroud)
我希望他们的电子邮件尚未确认的用户无法登录系统,因为我已经告诉过SignIn.RequireConfirmedEmail = true;。但是,当我运行该应用程序时,我可以登录两种用户,即他们的电子邮件已确认的用户和他们的电子邮件未确认的用户。那么为什么SignIn.RequireConfirmedEmail = true;在这种情况下不起作用,我还需要做其他配置吗?
编辑:我刚刚意识到我没有在登录方法中检查电子邮件确认,如下所示:
if (!await _userManager.IsEmailConfirmedAsync(user))
Run Code Online (Sandbox Code Playgroud)
所以主要问题是,即使我已经告诉过,上面的行是否必要SignIn.RequireConfirmedEmail = true;?我的意思是还不够SignIn.RequireConfirmedEmail = true;吗?如果还不够,那它有什么用呢?
仅仅使用opts.SignIn.RequireConfirmedEmail = true;是不够的。您还需要在登录时添加检查,以查看用户是否可以使用SignInManager登录,例如
var user = await _userManager.FindByEmailAsync(login.Email);
var canSignIn = await _signInManager.CanSignInAsync(user);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |