laravelでログイン機能を付ける。

php/laravel

laravelを含むwebアプリで必要な機能は主に下記の三つ

  • ログイン機能の実装(登録・ログイン画面・パスワード変更等)
  • ログインの権限レベルの設定(有り・無し)
  • 画面遷移の制御

ログイン機能の実装

まずログイン機能の実装ですがlaravel8標準のログイン機能の実装を使います。
laravel7まではlaravel/uiが使われいましたが、今回はJetstremと言うライブラリが使われています。

Jetstremを利用するのに livewireとinertia版の2つがあるようなので今回は

php artisan jetstream:install inertia

でインストールします。
inertiaはlaeravelからvueへの変数を簡単に渡せる便利なライブラリです。vueを使う場合には是非使いたいです。

Jetstreamの内容をプロジェクトにコピーする。

下記コマンドでjetstreamの内容をresouceのview配下にコピーします。
下記コマンドを実行します。

php artisan vendor:publish --tag=jetstream-views

すると下記フォルダにコピーされますので、ここの内容をいじっていきます。

/resources/views/vendor/jetstream

環境設定ファイルを変更する

config/app.phpを下記のように変更する。

    /*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default timezone for your application, which
    | will be used by the PHP date and date-time functions. We have gone
    | ahead and set this to a sensible default for you out of the box.
    |
    */

    //'timezone' => 'UTC',
    'timezone' => 'Asia/Tokyo',

    /*
    |--------------------------------------------------------------------------
    | Application Locale Configuration
    |--------------------------------------------------------------------------
    |
    | The application locale determines the default locale that will be used
    | by the translation service provider. You are free to set this value
    | to any of the locales which will be supported by the application.
    |
    */

    //'locale' => 'en',
    'locale' => 'ja',

    /*
    |--------------------------------------------------------------------------
    | Application Fallback Locale
    |--------------------------------------------------------------------------
    |
    | The fallback locale determines the locale to use when the current one
    | is not available. You may change the value to correspond to any of
    | the language folders that are provided through your application.
    |
    */

    'fallback_locale' => 'en',

    /*
    |--------------------------------------------------------------------------
    | Faker Locale
    |--------------------------------------------------------------------------
    |
    | This locale will be used by the Faker PHP library when generating fake
    | data for your database seeds. For example, this will be used to get
    | localized telephone numbers, street address information and more.
    |
    */

   // 'faker_locale' => 'en_US',
   'faker_locale' => 'ja_JP',

Jeatstreamの日本語化

下記より日本語パッケージをダウンロードします。

https://github.com/Laravel-Lang/lang

上記よりzipでダウンロードしてjaフォルダを

resources/lang

に入れます。エラー内容の編集は下記のファイルを編集しましょう

そこで、これらのエラーメッセージを完全にするために次のファイルを変更してください。

resources/lang/ja/validation.php

の一番にattributesがありますので

    'attributes'           => [],

下記のように変更します。

    'attributes' => [
        'name' => '名前', 
        'email' => 'メールアドレス', 
        'password' => 'パスワード' 
    ],

また元々のエラーメッセージは下記を日本語に変更する。
inertiaを選択しているので、ログインフォームがvueになっている。

resources/js/JetStream/ValidationErrors.vue

ログイン画面を日本語に変える場合は

resources/js/Pages/Auth/Register.vue

を編集する。

管理権限の設定の有無

ユーザーだけなのか、管理者がいるのか、管理者の中にもスタッフとシステム管理者がいるのか等管理権限が複数ある時があります。
その場合、ユーザーマスタと管理者マスタを二つ作ってアクセス制御するパターンもあるのですが、実装難易度を低くするなら、一つのユーザーテーブルの中に管理権限レベルで設定するのが楽です。

セキュリティレベルを上げる為にテーブルを分けるのもありですが、工数とうの相談になります。
ログイン画面を二つ作る事や、laravelの標準のログイン機能では、テーブルを二つに分ける事は想定に入ってないため、laravel標準を使い工数短縮するなら、テーブル一つでいくのがベストでしょう。

また権限設定ですが、role_levelのような権限レベルを持たせ
1~5なら管理者、6以上は一般ユーザーと区切る事で、管理者と一般ユーザーでも画面表示レベルを持たせることができます。
画面遷移ロジックの実装も一つのカラムを参照すれば良いので、複雑な権限レベルを持たせる場合でなければこちら楽です。

画面遷移の制御

画面の遷移の制御ですが、laravelの場合web.phpにmiddlewareを使い実装します。

作成したmiddlewareはapp/Http/Kernel.phpに登録する事によって使用できます。