当用户登录Laravel时触发事件

时间:2015-07-06 18:30:46

标签: php laravel laravel-5 laravel-5.1

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

我正在关注此链接 - example using JUnit 4,但是当我登录或退出时没有结果。

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

我可以在哪里举办此活动?

如何使用Events实现此功能?

2 个答案:

答案 0 :(得分:5)

您需要倾听的事件是:

  • auth.login - 用户成功登录时触发
  • auth.logout - 用户退出时触发
  • auth.attempt - 在用户尝试登录时触发

这些是Laravel自动触发的事件 - 请参阅 Illuminate \ Auth \ Guard 类,这是您使用验证外观时所获得的。

为了让你的听众工作,你需要做:

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

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

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

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

答案 1 :(得分:2)

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