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

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

这 2 个似乎有些含糊不清。我在整个项目中交替使用它们,唯一的原因是我不知道何时使用其中一个。

在什么情况下一个为真而另一个为假?

如果我只使用 ASP.NET Identity 来对用户进行身份验证,是哪个更有利还是哪个并不重要?

最佳答案

  • HttpContext.User.Identity.IsAuthenticated检查当前用户是否 经过身份验证(如果用户已通过身份验证,则为 true;否则为 false。)。当您这样设置用户时:HttpContext.User = new ClaimsPrincipal(new ClaimsIdentity("SomeAuthType")); 或任何认证中间件(如JwtBearer)请求认证成功则为 是的。
  • SignInManager 是aspnet 身份 的一项功能,它检查委托(delegate)人是否具有应用程序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

关于c# - 什么时候应该使用 HttpContext.User.Identity.IsAuthenticated 和 SignInManager.IsSignedIn(HttpContext.User)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071374/

相关文章:

c# - 为使用 SSH.NET SshClient.CreateShellStream 执行的命令 (sudo/su) 提供子命令

c# - VB6 中的 DotNet COM,没有强名称

c# - 将空元素添加到列表

mysql - 如何在 Azure 网站中定义 MySQL 数据库的连接字符串

c# - 使用依赖注入(inject)将 token 获取从startup.cs传递到HomeController.cs

c# - 如何在我的 .NET Core API 中使用 Windows 环境变量?

c# - EntityFramework Core 2.0 - 添加迁移错误 "The EntityFramework package is not installed"

c# - 自动完成文本框在执行查询时卡住。一定有更好的办法!

asp.net - 我可以在没有管理员用户的情况下使用 Microsoft.Web.Administration 中的 ServerManager 作为应用程序池标识吗

c# - 如何使用数据库在mvc3中的jquery中显示确认框