我一直在寻找一种方法来检查用户在我网站上的活动时间。我的第一个想法是在数据库上创建一个名为“last login”的日期时间字段,每次用户登录时,它都会更新。
似乎很好,但是当用户有“让我登录”令牌时,会话将保持活动状态,并且他不必在一段时间内通过登录过程,从而影响活动日期的准确性(I可能会发送一封电子邮件“我们想你”,而实际上他是一个活跃的用户)
我认为另一种方法是采取一些可以触发“主动”保存的关键操作,但是再一次,用户无法执行某些操作,遇到同样的问题。
由于性能原因我无法在每个用户操作中更新字段,这对此有什么好处?专业人士使用什么?
编辑:我知道Laravel有一些认证课程;当用户回来时(即使他仍然登录),这些功能是否会激活?
答案 0 :(得分:8)
您可以使用凭据和记住我令牌来侦听触发登录的 auth.login 事件。一旦它被解雇,您需要更新上次登录日期。
首先,创建监听器:
class UpdateLastLoginDate {
public function handle($user) {
$user->last_login_at = Carbon::now();
$user->save();
}
}
然后在 EventServiceProvider :
中注册听众protected $listen = [
'auth.login' => [
UpdateLastLoginDate::class
]
];
<强>更新强> 从5.2版开始,必须将Event类名添加为数组键,并将用户作为传递的事件对象的属性进行访问:
protected $listen = [
'Illuminate\Auth\Events\Login' => [
UpdateLastLoginDate::class
]
];
class UpdateLastLoginDate {
public function handle($event) {
$user = $event->user;
$user->last_login_at = Carbon::now();
$user->save();
}
}