2016-11-11 96 views
0

我有一个Node/express应用程序,使用Passport进行帐户创建和身份验证。我希望能够检查哪些会话处于活动状态,即哪些用户当前已登录。Node.js检查是否有其他用户登录

我可以在每个用户的个人资料上有一个标志,在登录/注销时会更改,但我不知道护照如何处理关闭浏览器的用户,而不是专门去注销路由,所以我不知道在这种情况下该标志是否会被设置为false。

实现此目的的最佳方式是什么?

我的最后一步就是能够告诉发球是否要发送通知邮件给其他用户,当他们收到一条消息,从别人 - 如果他们当前登录的话,他们不会得到一个电子邮件。

+0

你有没有尝试过任何东西呢?从你的问题来看,这听起来像你甚至还没有尝试过设置Passport,因为当你这样做的时候你的一些问题会得到解答。 – Paul

+0

是的,我的护照正在运行。我还没有尝试过任何东西,因为我不知道处理这种情况的最佳方式。我所做的所有搜索都会显示如何检查当前用户是否已登录的结果,但这对此没有帮助。会话在一定时间后过期,但我不知道如何获得该过期以触发更改'isLoggedOn'标志。 –

回答

1

好了,所以如果你有护照成立,那么答案取决于你所使用的会话存储。实质上,您将查询会话存储以查看哪些活动用户在那里,但实际操作的实际机制取决于您的实施。一旦知道某个给定用户是否被会话存储视为活动的,您可以决定是否发送该消息。

然而,会话存储是不可能不犯错。无论您的会话过期设置如何,几乎不可能保证商店对所有用户都有完美的知识;从用户关闭浏览器窗口到会话认为他或她离线时,总是有一些非零的时间量。

所以,即使与先发制人的尝试,以确保用户是发送消息,如果你想真正可靠的传送,你会希望有你的客户端代码之前在网上发回确认收讫。如果确认失败,那么你可以安全地假设用户没有得到它,并在事后发送电子邮件。