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

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

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

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

对于每次成功login,您都需要在数据库中保留会话logging。 当有人尝试login时,您需要查询数据库来计算活动会话的数量。

您计算login请求数量的想法不起作用的原因有几个:

  1. 如果服务器重新启动,计数将会丢失,而用户仍然会被authentication。
  2. 它不能与多个节点进程进行扩展,因为每个节点进程都无法将login尝试传递给其他进程。

我最后在会话表中添加了另一个字段,用于跟踪user_id

在创build会话的每个login操作中,我将查询当前用户的所有会话,并在超出限制时删除它们。