【问题标题】:Check if a user is authenticated using ASP.NET Identity 2检查用户是否使用 ASP.NET Identity 2 进行了身份验证
【发布时间】:2014-05-23 06:40:28
【问题描述】:

我正在使用 ASP.NET Identity 2 来管理用户,并想知道是否有通过 UserManager 提供的功能来检查特定用户当前是否已通过身份验证或登录。我的意思是,让网站管理员检查给定用户是否登录。我知道,有 User.Identity.IsAuthenticated 仅适用于当前的 HTTP 请求。否则我该如何实施呢?

【问题讨论】:

  • 网络本质上是无状态的。因此,如果用户已登录,则无法直接询问网站。毕竟,我可以登录然后关闭浏览器。那么我是否登录?我相信 FormAuthentication 只会查看上次登录或更新状态日期(我现在不记得该字段)并将其与时间跨度(例如 30 分钟)进行比较,以说明用户当前是否已登录。

标签: asp.net-identity asp.net-identity-2


【解决方案1】:

不,基本 Identity 2.0 中没有跟踪当前登录用户的功能,您必须自己添加。由于 MVC 的工作方式(实际上是因为 HTTP 的无状态性),服务器永远无法确定客户端是否登录。

在最基本的层面上,“登录”可以定义为从何时开始:

  • 用户通过身份验证,身份验证票据作为cookie写入浏览器

直到发生以下任一情况:

  • 用户点击退出链接

  • 身份验证票证cookie过期或被删除

由于票证存在于客户端,服务器只知道用户在第一种情况下退出的确切时间。在第二种情况下,它只知道来自该客户端的下一个 HTTP 请求何时发出。除非您使用一些后台 AJAX 轮询或其他客户端服务器通信(如 SignalR),否则如果客户端只是闲置,或者他们已经关闭浏览器或移动到另一个页面,服务器将不会知道差异。

如果您热衷于自己跟踪这一点,则必须扩展 IdentityUser 类以添加用户上次登录或活动的时间戳(并在每次用户发出请求时更新此信息) ,然后将其与当前时间进行比较,然后确定在一定时间内没有活动的用户将被视为已注销。例如,您可能会确定在过去 30 分钟内未联系服务器的用户已“注销”,但除非他们实际通过 Account\Logout 控制器方法,否则您永远无法确定。

【讨论】:

    猜你喜欢
    • 2021-03-28
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2023-04-08
    • 2017-05-15
    • 2017-08-04
    相关资源
    最近更新 更多