当用户登录 Laravel 时触发事件

Fire an event when the user logins in Laravel

我正在尝试实现事件,我必须在用户登录时触发事件。

我正在关注这个link - http://laravel.com/docs/5.1/events#event-subscribers,但是我登录或注销时都没有结果。

public function onUserLogin($event) {
        $user = new User;

        $user->last_login_on = Carbon::now();

        $user->save();
    }

    /**
     * Handle user logout events.
     */
    public function onUserLogout($event) {
        $user = new User;

        $user->last_login_on = Carbon::now();

        $user->save();
    }

这是subscribe

public function subscribe($events)
    {
        $events->listen(
            'App\Events\UserLoggedIn',
            'App\Listeners\UserEventListener@onUserLogin'
        );

        $events->listen(
            'App\Events\UserLoggedOut',
            'App\Listeners\UserEventListener@onUserLogout'
        );
    }

虽然,我不知道我应该在这里放什么,App\Events\UserLoggedIn

我在哪里可以触发这个事件?

如何使用事件实现此功能?

您需要监听的事件是:

  • auth.login - 当用户成功登录时触发
  • auth.logout - 当用户注销时触发
  • auth.attempt - 当用户尝试登录时触发

这些是 Laravel 自动触发的事件 - 请参阅 Illuminate\Auth\Guard class 这是您使用 [=26 时得到的结果=]Auth门面.

为了让您的听众正常工作,您需要执行以下操作:

$events->listen(
    'auth.login',
    'App\Listeners\UserEventListener@onUserLogin'
);

$events->listen(
    'auth.logout',
    'App\Listeners\UserEventListener@onUserLogout'
);

另一种选择是为两个事件定义单独的处理程序 classes,例如:

class UserEventLoginHandler {
  public function handle($event) {
    //do some logic here
  }
}

class UserEventLogoutHandler {
  public function handle($event) {
    //do some logic here
  }
}

然后在 :

中定义监听器
protected $listen = array(
  'auth.login' => 'App\Listeners\UserEventLoginListener',
  'auth.logout' => 'App\Listeners\UserEventLogoutListener'
);

您还可以使用 Laravel 的命令来生成处理程序 - 有关更多详细信息,请参阅 https://mattstauffer.co/blog/laravel-5.0-events-and-handlers

我知道这个问题很老了,但要回答最后一条评论,以防其他人遇到同样的问题。 您还需要在 onUserLogin 和 onUserLogout 方法中访问当前登录的用户,因为创建用户模型的新实例会创建一个新用户而不是更新当前登录的用户。