Laravel - 关于如何找出用户上次登录的架构

时间:2015-07-26 06:17:49

标签: php laravel laravel-5

我一直在寻找一种方法来检查用户在我网站上的活动时间。我的第一个想法是在数据库上创建一个名为“last login”的日期时间字段,每次用户登录时,它都会更新。

似乎很好,但是当用户有“让我登录”令牌时,会话将保持活动状态,并且他不必在一段时间内通过登录过程,从而影响活动日期的准确性(I可能会发送一封电子邮件“我们想你”,而实际上他是一个活跃的用户)

我认为另一种方法是采取一些可以触发“主动”保存的关键操作,但是再一次,用户无法执行某些操作,遇到同样的问题。

由于性能原因我无法在每个用户操作中更新字段,这对此有什么好处?专业人士使用什么?

编辑:我知道Laravel有一些认证课程;当用户回来时(即使他仍然登录),这些功能是否会激活?

1 个答案:

答案 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();
  }
}

https://laravel.com/docs/5.2/upgrade(滚动到活动)