限制每个用户在 PassportJS 上的并发会话数

Limit the number of concurrent sessions per user on PassportJS

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

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

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

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

您计算登录请求次数的想法行不通,原因如下:

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

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

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