LoginSignup
4
2

More than 3 years have passed since last update.

Laravel 最終ログイン日時をDBに格納する

Posted at

目的

  • Authを用いたログイン機能で、最終ログイン時間をDBに保存する方法をまとめる

実施環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.3)
ハードウェア MacBook Pro (16-inch ,2019)
プロセッサ 2.6 GHz 6コアIntel Core i7
メモリ 16 GB 2667 MHz DDR4
グラフィックス AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.3 Homwbrewを用いて導入
Laravel バージョン 7.0.8 commposerを用いて導入
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いて導入

前提情報

実施概要

  1. カラムの追加
  2. ログイン日時格納設定
  3. 確認

実施詳細

  1. カラムの追加

    1. アプリ名ディレクトリで下記コマンドを実行して最終ログイン日時のカラムを追加するためのマイグレーションファイルを作成する。

      $ php artisan make:migration add_last_login_at_column_to_users_table --table=users
      
    2. アプリ名ディレクトリで下記コマンドを実行してマイグレーションファイルを開く(マイグレーションファイル名は先のコマンド実行日時により変化するので都度修正して実行する。)

      $ vi database/migrations/YYYY_MM_DD_XXXXXX_add_last_login_at_column_to_users_table.php
      
    3. 先のコマンドで開いたマイグレーションファイルを下記のように修正する。

      アプリ名ディレクトリ/database/migrations/YYYY_MM_DD_XXXXXX_add_last_login_at_column_to_users_table.php
      <?php
      
      use Illuminate\Database\Migrations\Migration;
      use Illuminate\Database\Schema\Blueprint;
      use Illuminate\Support\Facades\Schema;
      
      class AddLastLoginAtColumnToUsersTable extends Migration
      {
          /**
           * Run the migrations.
           *
           * @return void
           */
          public function up()
          {
              Schema::table('users', function (Blueprint $table) {
                  //下記を追記する、nullの格納を許容した、dateTime型のlast_logim_atカラム
                  $table->dateTime('last_login_at')->nullable();
              });
          }
      
          /**
           * Reverse the migrations.
           *
           * @return void
           */
          public function down()
          {
              Schema::table('admins', function (Blueprint $table) {
                  //
              });
          }
      }
      
    4. アプリ名ディレクトリで下記を実行してマイグレートを行う。

      $ php artisan migrate
      
  2. ログイン日時格納設定

    1. アプリ名ディレクトリで下記コマンドを実行してログイン時に実行されるファイルを開く。

      $ vi code app/Http/Controllers/Auth/LoginController.php
      
    2. class LoginController extends Controllerの中括弧({})内の最終行に下記の4行を記載する。

      アプリ名ディレクトリ/app/Http/Controllers/Auth/LoginController.php
      protected function authenticated(Request $request, $time)
      {
          $time->last_login_at = now();
          $time->save();
      }
      
    3. 追記が完了した「LoginController.php」ファイルの内容を記載する。

      アプリ名ディレクトリ/app/Http/Controllers/Auth/LoginController.php
      <?php
      
      namespace App\Http\Controllers\Auth;
      
      use App\Http\Controllers\Controller;
      use App\Providers\RouteServiceProvider;
      use Illuminate\Http\Request;
      use Illuminate\Foundation\Auth\AuthenticatesUsers;
      
      class LoginController extends Controller
      {
          /*
          |--------------------------------------------------------------------------
          | Login Controller
          |--------------------------------------------------------------------------
          |
          | This controller handles authenticating users for the application and
          | redirecting them to your home screen. The controller uses a trait
          | to conveniently provide its functionality to your applications.
          |
          */
      
          use AuthenticatesUsers;
      
          /**
           * Where to redirect users after login.
           *
           * @var string
           */
          protected $redirectTo = '/user_home';
      
          /**
           * Create a new controller instance.
           *
           * @return void
           */
          public function __construct()
          {
              $this->middleware('guest')->except('logout');
          }
      
          protected function authenticated(Request $request, $time)
          {
              $time->last_login_at = now();
              $time->save();
          }
      }
      
    4. 実際にLaravelアプリ上でログインを行う

  3. 確認

    1. 下記コマンドを実行してMySQLにターミナルからログインする。(MySQLのrootパスワードを忘れた方はこちら→MySQL 8.0.18 のrootパスワードを忘れた時のリセット方法)

      $ mysql -u root -p
      
    2. 下記を実行してLaravelアプリで使用しているデータベースを指定する。

      mysql> use データベース名;
      
    3. 下記コマンドを実行してlast_login_atカラムにログイン時間が格納されている事を確認する。

      mysql> select * from users;
      
    4. ログイン時間が格納されていれば実装完了である。(日本時間ではない日時が格納されてしまった方はこちら→Laravel タイムゾーンを日本に変更する)

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2