Asp.Net Core 2.0 User.Identity.IsAuthenticated和_signInManager.IsSignedIn(User)仍然是true

时间:2018-02-02 14:35:09

标签: c# asp.net asp.net-mvc asp.net-core-2.0 claims-based-identity

最近我开始使用Asp.Net Core 2.0 MVC项目 个人认证。 ConfigureServices如下:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DBConnection")));
    services.AddIdentity<ApplicationUser, ApplicationRole>()
            .AddEntityFrameworkStores<AppDbContext>()
            .AddDefaultTokenProviders();
}

出于某种原因,注销后User.Identity.IsAuthenticated和_signInManager.IsSignedIn(User)仍然是真的,无论我是这样做的:await _signInManager.SignOutAsync();还是await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);而不是如果我关闭并稍后在浏览器中重新打开应用程序。

我总是需要它,如果有人回到索引应用程序或关闭并在浏览器中重新打开应用程序,系统会注销任何以前打开的会话并强制登录。

我尝试过以下但没有成功!

[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> Login()
{
    var auth = User.Identity.IsAuthenticated; // Still true
    if (_signInManager.IsSignedIn(User)) // Still true
    {
        await _signInManager.SignOutAsync();
        //HttpContext = new DefaultHttpContext
        //{
        //    User = new ClaimsPrincipal(new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, "username") }, ""))
        //};
    }
    else
    {
        // Clear the existing external cookie to ensure a clean login process
        await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);
    }

    return View();
}

0 个答案:

没有答案