检查用户是否已登录Laravel 4

4

你好,我正在为我的网站实现一个聊天/收件箱功能。当用户未登录并收到来自其他用户的消息时,网站将向消息接收者发送一封电子邮件。但是当用户已登录时,就不会发送电子邮件。

我的问题是如何确定用户是否已登录?例如,如果用户已登录,然后关闭浏览器,我的后端将不知道任何信息。

顺便说一下,我正在使用Angularjs SPA和Laravel 4中的restful API构建。


我认为最好在Angularjs中实现它,而不是在php中...在php中,您可以进行一些“愚蠢”的检查,例如用户是否在线,如果他在过去的2分钟内处于活动状态。 - Amir Bar
我该如何在AngularJS中实现这个功能?我的后端需要检查用户是否已登录,然后决定是否发送电子邮件。 - user1424508
听着,你想要做两个不同的任务... 1:找出用户是否已登录(php Auth::check())... 2:找出用户是否在线,为此任务,你需要使用AngularJS和例如WebSocket。 - Amir Bar
2个回答

19

如果你正在使用内置的Laravel身份验证:

if(Auth::check())
{
   //do something
}

如果您正在使用Sentry:

if(Sentry::check())
{
   //do something
}

我不明白。如果用户A正在给未登录的用户B发消息,我该如何判断用户B是否已登录?我认为Auth :: check只对当前已登录的用户(即发送消息的用户)有效? - user1424508
2
嗨,在这种情况下,您需要在用户表中添加一列。即“logged_in”,如果用户登录,则将其设置为1。当他们注销时,将其设置为0。 - Anam
勾选此列以检查用户是否已登录。 - Anam
1
如果用户登录后关闭了浏览器,那么该如何将列更改为已注销? - user1424508
1
你可以简单地执行一个每5-10分钟运行一次的cron,如果会话cookie不存在,则更新用户,并在会话配置中将expire_on_exit设置为true。当窗口关闭时,你也可以使用Ajax发送一个php请求到你的注销路由。 - Justin E
你应该考虑修改答案以符合原始问题的要求。 :) - AturSams

4
我建议在用户登录时使用Ajax来“ping”数据库。 添加一个类型为日期的last_logged_in列,因此当用户登录时,他们会将其last_logged_in字段更新为当前日期。您可以随时使用这种Ajax(非常微小的性能问题)。 要查看用户是否已登录,只需检查last_logged_in日期并将其与当前日期减去一些时间(1分钟)进行比较。
我不建议将其用于向用户发送电子邮件,因为这可能会导致大量垃圾邮件。您可以另外使用is_logged_in字段,但不要仅使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接