【问题标题】:Limit the number of concurrent sessions per user on PassportJS在 PassportJS 上限制每个用户的并发会话数
【发布时间】:2015-08-11 03:37:51
【问题描述】:

正如标题所说,我需要为 Web 应用程序设置每个用户的并发会话上限,以防止帐户共享。

我在passportjs(节点平台上)中使用本地策略进行身份验证。

这样做的最佳做法是什么?计算登录请求的数量(创建会话的位置)是否足够?

【问题讨论】:

    标签: node.js session login passport.js


    【解决方案1】:

    对于每次成功登录,您都需要在数据库中维护一个会话记录。当有人尝试登录时,您需要查询数据库以计算活动会话数。

    由于以下几个原因,您计算登录请求数的想法行不通:

    1. 如果服务器重新启动,计数将丢失,而用户仍将通过身份验证。
    2. 它不能与多个 Node 进程一起扩展,因为每个 Node 进程都无法将登录尝试传递给其他进程。

    【讨论】:

    • 当我说计数时,我的意思是把它保存在数据库中。
    • 任何想法如何处理过期的会话?
    • 您使用的是哪个数据库?
    • 我可以随心所欲。说 SQL Server。
    • 对于 SQL 数据库,您需要构建一个查询以从数据库中删除任何过期的会话,并在您关心会话的任何时候运行该查询。您将有一个“expiresAt”字段,因此您将有逻辑删除所有 expiresAt
    【解决方案2】:

    我最终在会话表中添加了另一个字段以跟踪 user_ids。

    在创建会话的每个登录操作中,我都会查询当前用户的所有会话,如果超过限制则将其删除。

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2011-08-29
      • 2015-01-01
      相关资源
      最近更新 更多