Я только что внедрил AspNetCore Identity в свое веб-приложение AspNetCore 2.1 MVC. Я не вносил никаких «пользовательских» изменений в идентификационный код. У меня есть локальные входы в систему с таблицей AspNetUsers в моей БД. Я включил входы в Google и Twitter в своем приложении. Они оба работают отлично, пользователи перенаправляются на соответствующие страницы входа в социальную платформу, а затем возвращаются на страницу приложения. Это все работает отлично! Проблема возникает, когда пользователь Google или Twitter выходит из системы. Приложение направляет пользователя на страницу Log out.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 для входа в систему, он беспрепятственно входит в приложение без запроса идентификатора пользователя/пароля в любом месте. Я запустил этот код в отладке, и все работает без ошибок. Я даже вижу, как файл cookie аутентификации удаляется из консоли Chrome.
Вот как я настроил Identity в моем 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 несколько раз и следовал им шаг за шагом, чтобы внедрить эти социальные сети. Не уверен, что мне здесь не хватает. Я надеюсь, что кто-то может помочь мне здесь!