我刚刚在AspNetCore 2.1 MVC Web应用程序中实现了AspNetCore Identity。我尚未对身份代码进行任何“自定义”更改。我在数据库中使用AspNetUsers表启用了本地登录。我已在我的应用程序中启用了Google和Twitter登录。它们都工作正常,用户被重定向到相应的社交平台登录页面,然后被发送回应用程序页面。这一切都完美地工作! 问题在Google或Twitter用户注销时出现。该应用程序将用户定向到Log.cshtml页面并执行以下方法。
public async Task<IActionResult> OnPost(string returnUrl = null)
{
await _signInManager.SignOutAsync();
_logger.LogInformation("User logged out.");
if (returnUrl != null)
{
return LocalRedirect(returnUrl);
}
else
{
return Page();
}
}
执行注销后,用户将重定向到我的应用程序的主页。然后,当同一用户决定重新登录该应用程序时,他们将被带到登录页面。在登录页面上,当用户单击Google或Twitter按钮登录时,他们会无缝登录到应用程序中,而不会在任何地方提示输入用户ID /密码。我在调试中运行了此代码,所有代码都正常运行,没有任何错误。我什至可以看到身份验证Cookie已从Chrome控制台中删除。
这是我在Startup.cs中设置身份的方式。
services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
//lockout settings
options.Lockout.AllowedForNewUsers = true;
options.Lockout.MaxFailedAccessAttempts = 3;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
// Password settings
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequiredUniqueChars = 2;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = true;
// Signin settings
options.SignIn.RequireConfirmedEmail = true;
options.SignIn.RequireConfirmedPhoneNumber = false;
// User settings
options.User.RequireUniqueEmail = true;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddUserManager<EXLNTUserManager>()
.AddDefaultTokenProviders();
//Google authentication
services.AddAuthentication().AddGoogle(googleOptions =>
{
googleOptions.ClientId = Configuration["GooglePlusApi:client_id"];
googleOptions.ClientSecret = Configuration["GooglePlusApi:client_secret"];
});
//Twitter authentication
services.AddAuthentication().AddTwitter(twitterOptions =>
{
twitterOptions.ConsumerKey = Configuration["TwitterApi:ConsumerKey"];
twitterOptions.ConsumerSecret = Configuration["TwitterApi:ConsumerSecret"];
});
我已经多次阅读MS Docs,并逐步遵循它们来实现这些社交登录。不知道我在这里想念的是什么。我希望有人可以在这里帮助我!