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

rap*_*dko 5 php laravel laravel-5

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

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

我认为另一种方法是有一些关键动作可以触发'主动'保存,但是再一次,用户无法做一些这些动作,遇到同样的问题.

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

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

jed*_*ylo 8

您可以使用两个凭据监听为登录触发的auth.login事件,并记住我的令牌.一旦它被解雇,您需要更新上次登录日期.

首先,创建监听器:

class UpdateLastLoginDate {
  public function handle($user) {
    $user->last_login_at = Carbon::now();
    $user->save();
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在EventServiceProvider中注册侦听器:

protected $listen = [
  'auth.login' => [
        UpdateLastLoginDate::class
    ]
];
Run Code Online (Sandbox Code Playgroud)

更新 从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();
  }
}
Run Code Online (Sandbox Code Playgroud)

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