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

Dea*_*ane 4 c# asp.net asp.net-core-mvc asp.net-identity-3 asp.net-core

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

一个是真的而另一个不是的情况会怎样?

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

ade*_*lin 6

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

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