Laravel 5.5:成功登录时不会更新上次登录和上次登录 IP

Ent*_*ner 0 php laravel laravel-5.5 laravel-authentication

我正在使用 laravel 5.5,想在每次成功登录时记录上次登录(日期时间)和上次登录 IP。但它没有更新。

登录控制器:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    protected function authenticated(Request $request, $user)
    {
        $user->update([
            'last_login_at' => Carbon::now()->toDateTimeString(),
            'last_login_ip' => $request->getClientIp()
        ]);
    }
}
Run Code Online (Sandbox Code Playgroud)

用户模型:

protected $fillable = [
    'first_name','last_name', 'email', 'password','phone','user_type','last_login_at',
    'last_login_ip',
];
Run Code Online (Sandbox Code Playgroud)

sad*_*har 5

你是进口的碳包吗?

无论如何要实现这一点,我认为https://laravel.com/docs/5.7/events是一种优雅的方式。

在 app\Providers\EventServiceProvider.php 里面写下面的代码

   protected $listen = [

      'Illuminate\Auth\Events\Login' => [
        'App\Listeners\LogSuccessfulLogin',
       ],
 ];
Run Code Online (Sandbox Code Playgroud)

在 app\Listeners\LogSuccessfulLogin.php 中创建一个监听器

namespace App\Listeners;
use Illuminate\Auth\Events\Login;

class LogSuccessfulLogin {

  /**
   * Create the event listener.
   *
   * @return void
   */
  public function __construct(){


  }

 /**
  * Handle the event.
  *
  * @param  Login $event
  * @throws \Exception
  */

  public function handle(Login $event){
    $user = $event->user;

    $user->last_login_ip = request()->getClientIp();
    $user->save();

  }
}
Run Code Online (Sandbox Code Playgroud)

只需根据需要更新 handle() 即可。在此处导入 carbon 包并更新 last_login_at。