AspNet Core 2.1身份-外部登录用户注销不持久

时间:2018-07-23 22:12:51

标签: c# asp.net-core asp.net-core-identity

我刚刚在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,并逐步遵循它们来实现这些社交登录。不知道我在这里想念的是什么。我希望有人可以在这里帮助我!

0 个答案:

没有答案