Идентификация AspNet Core 2.1 - выход пользователя из внешнего входа не сохраняется

Я только что внедрил 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 несколько раз и следовал им шаг за шагом, чтобы внедрить эти социальные сети. Не уверен, что мне здесь не хватает. Я надеюсь, что кто-то может помочь мне здесь!


person exlnt    schedule 23.07.2018    source источник
comment
См. stackoverflow.com/a/37745649/310601.   -  person Mark G    schedule 24.07.2018
comment
@CamiloTerevinto Я думаю, что к моему вопросу относится другой вопрос, но на самом деле он не дает решения, которое я могу применить.   -  person exlnt    schedule 24.07.2018
comment
Потому что нет решения. Вы ничего не можете сделать, чтобы вывести пользователя из стороннего сервиса. Решение заключается в понимании того, как работает OAuth.   -  person Camilo Terevinto    schedule 24.07.2018