什么时候应该使用HttpContext.User.Identity.IsAuthenticated和SignInManager.IsSignedIn(HttpContext.User)?

时间:2016-08-22 04:21:33

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

这些似乎有些模棱两可。我在整个项目中交替使用它们,唯一的原因是因为我无法弄清楚何时使用其中一种。

如果一个是真的而另一个不是的话会是什么情况?

如果我只使用ASP.NET身份对用户进行身份验证,那么一个或另一个更有利还是不重要?

1 个答案:

答案 0 :(得分:6)

  • HttpContext.User.Identity.IsAuthenticated检查当前用户是否 authenticated(如果用户已通过身份验证,则为true;否则为false。)。当你设置这样的用户:HttpContext.User = new ClaimsPrincipal(new ClaimsIdentity("SomeAuthType"));或者任何身份验证中间件(例如JwtBearer)的请求身份验证成功时,它将是 真。
  • SignInManager是 aspnet identity 的一项功能,它会检查主体是否与应用程序cookie身份具有身份。如果您查看source code,可以看到:return principal?.Identities != null && principal.Identities.Any(i => i.AuthenticationType == Options.Cookies.ApplicationCookieAuthenticationScheme);

因此,如果您使用aspnet身份并且想要检查用户是否通过 aspnet身份中间件app.UseIdentity())进行身份验证,那么请使用SignInManager.IsSignedIn。如果您不使用aspnet身份,或者当前用户的身份验证方式并不重要,请使用HttpContext.User.Identity.IsAuthenticated