Laravel 5.2:用户登录后做了什么?

夏期劇*_*期劇場 22 php authentication event-handling laravel laravel-5.2

(我是Laravel的初学者)

我正在使用Laravel 5.2.我已成功启用身份验证; 通过做php artisan make:auth和事.

所以我的登录工作正常.

现在我需要在有人登录后做一些事情.举个简单的例子:

登录:

  • 用户登录后,将值写入Session.
  • 例如: $request->session()->put('UserAgent', $ClientUserAgent);

登出:

  • 同样的事情,一旦用户注销,删除自定义会话值.
  • 例如: $request->session()->forget('UserAgent');

我不知道是否有(类似的东西)hooks或者Event Listeners,Event Handlers或者类似的东西.

我该怎么办?

kjd*_*n84 18

对于较新版本的Laravel

如果你只是做一些非常简单的事情,那么创建一个事件处理程序似乎对我来说太过分了.为此,Laravel在AuthenticatesUsers课程中包含一个空方法.

只需将以下方法放入其中app\Http\Controllers\LoginController(覆盖它):

protected function authenticated(Request $request, $user)
{
    // stuff to do after user logs in
}
Run Code Online (Sandbox Code Playgroud)


Ali*_*ief 12

对于post登录,你可以通过修改App/Http/Controllers/Auth/AuthController.php来做到这一点.

authenticated()添加到该类中以覆盖默认值:

protected function authenticated(Request $request, User $user){
   //put your thing in here

   return redirect()->intended($this->redirectPath());
}
Run Code Online (Sandbox Code Playgroud)

在课堂上也包括这个:

 use Illuminate\Http\Request;
Run Code Online (Sandbox Code Playgroud)

对于注销,将此函数添加到同一个类中:

protected function getLogout()
{
    Auth::logout();

    //do something here

    return redirect('/');
}
Run Code Online (Sandbox Code Playgroud)

并且在课堂上也包括这个:

use Auth;
Run Code Online (Sandbox Code Playgroud)


夏期劇*_*期劇場 1

下面Alief 的答案按预期工作正常。但正如我在谷歌上搜索的那样,使用事件处理程序可能是更优选的方式。(它的工作原理类似于自定义挂钩)。

因此,在不尊重下面 Alief 的答案的情况下,让我选择 -->我刚刚发现的这个事件处理程序方法。

谢谢大家的问候!