プロジェクト開始時に作成されるファイル
Userモデル
プロジェクトを作成すると、appディレクトリー下にUser.phpが作成される。
Userモデルの内容についてはこちらを参照。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable {     use Notifiable;     // マスアサインメントの対象となる属性     protected $fillable = [         'name', 'email', 'password',     ];     // 秘匿する属性     protected $hidden = [         'password', 'remember_token',     ];     // データベース読み込み時にキャストする属性     protected $casts = [         'email_verified_at' => 'datetime',     ]; } | 
コントローラー
プロジェクトを作成すると、Controllers/Authディレクトリー下に以下の認証用コントローラー群が自動的に作成される。
| 1 2 3 4 5 6 7 8 | [vagrant@localhost laravel_photo]$ ls app/Http/Controllers/Auth/ -Al 合計 24 -rw-rw-r--. 1 vagrant vagrant 1024  5月 12 05:47 ConfirmPasswordController.php -rw-rw-r--. 1 vagrant vagrant  667  5月 12 05:47 ForgotPasswordController.php -rw-rw-r--. 1 vagrant vagrant 1002  5月 12 05:47 LoginController.php -rw-rw-r--. 1 vagrant vagrant 1950  5月 12 05:47 RegisterController.php -rw-rw-r--. 1 vagrant vagrant  844  5月 12 05:47 ResetPasswordController.php -rw-rw-r--. 1 vagrant vagrant 1130  5月 12 05:47 VerificationController.php | 
ルーティング設定
ユーザー認証のためのルーティング
プロジェクト作成後にUserモデルと必要なコントローラーはLaravelにより作成されるが、ルーティングは設定が必要になる。
ルーティングファイルに以下の1行を記載すると、ユーザー認証用の各種ルーティングがまとめて定義される。
| 1 | Auth::routes(); | 
ルーティングリスト
関係するルーティングは以下の通りで、ログイン関係とユーザー登録関係が定義されている。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [vagrant@localhost laravel_photo]$ php artisan route:list +--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+ | Domain | Method    | URI                    | Name             | Action                                                                 | Middleware   | +--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+ |        | GET|HEAD  | /                      |                  | Closure                                                                | web          | |        | GET|HEAD  | api/user               |                  | Closure                                                                | api,auth:api | ..... |        | GET|HEAD  | login                  | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest    | |        | POST      | login                  |                  | App\Http\Controllers\Auth\LoginController@login                        | web,guest    | |        | POST      | logout                 | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web          | |        | GET|HEAD  | password/confirm       | password.confirm | App\Http\Controllers\Auth\ConfirmPasswordController@showConfirmForm    | web,auth     | |        | POST      | password/confirm       |                  | App\Http\Controllers\Auth\ConfirmPasswordController@confirm            | web,auth     | |        | POST      | password/email         | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web          | |        | GET|HEAD  | password/reset         | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web          | |        | POST      | password/reset         | password.update  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web          | |        | GET|HEAD  | password/reset/{token} | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web          | ..... |        | GET|HEAD  | register               | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest    | |        | POST      | register               |                  | App\Http\Controllers\Auth\RegisterController@register                  | web,guest    | +--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+ | 
ビューの作成
自動作成の場合
- php artisan ui vue --authコマンドでユーザー認証に必要なビューを作成
- 作成されるビューはresources/views/authディレクトリー下に配置
カスタムビュー作成の場合
authディレクトリーの作成
- resources/viewsディレクトリー下に- authディレクトリーを作成
- 作成したauthディレクトリー下に必要なビューを定められたファイル名と内容で作成
登録用フォームビューの作成~register.blade.php
authディレクトリー下に、以下フォームを含む内容でregister.blade.phpを作成。ビュー名はLaravelが生成するコントローラーで想定されているされるため、これに合わせる必要がある。
たとえばユーザー登録フォームのビュー名はRegisterControllerでuseされているRegistersUsersトレイトのshowRegistrationForm()メソッドにおいて、'auth.register'として呼ばれる。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |   <form method="post" action="{{ route('register') }}">     @csrf     <div>       <label>ユーザー名: <input type="text" name="name"></label>     </div>     <div>       <label>メールアドレス: <input type="email" name="email"></label>     </div>     <div>       <label>パスワード: <input type="password" name="password"></label>     </div>     <div>       <label>パスワード: <input type="password" name="password_confirmation"></label>     </div>     <div>       <input type="submit" value="登録">     </div>   </form> | 
ブラウザーからURL:ドメイン名/registerでアクセスすると以下のようなフォームが表示される。
カスタマイズしていない状態で登録ボタンを押すと、URL:ドメイン名/homeにリダイレクトされる(後述のように、そのままでは404エラーになる)。
ログインフォームビューの作成~login.blade.php
authディレクトリー下に、以下のフォームを含む内容でlogin.blade.phpを作成。
| 1 2 3 4 5 6 7 8 9 10 11 |   <form method="post" action="{{ route('login') }}">     <div>       <label>メールアドレス: <input type="email" name="email"></label>     </div>     <div>       <label>パスワード: <input type="password" name="password"></label>     </div>     <div>       <input type="submit" value="ログイン">     </div>   </form> | 
ブラウザーからURL:ドメイン名/loginでアクセスすると以下のようなフォームが表示される。
カスタマイズしていない状態で登録ボタンを押すと、URL:ドメイン名/homeにリダイレクトされる。
コントローラー設定
ログイン後の画面遷移
たとえばユーザーログイン後のトップページを'posts/index'とする。
デフォルト設定~404エラー
カスタマイズしていない状態では以下の様になっているが、このままログインすると404エラーとなる。
- ルーティングファイル→特に設定なし
- コントローラー
 1protected $redirectTo = RouteServiceProvider::HOME;
このときブラウザーのURL表示はhttp://localhost:3000/homeとなっている。
方法1~コントロールファイルを変更
以下の様に$redirectToの定義を編集すると、意図したページに遷移する。
| 1 2 3 4 5 | protected $redirectTo = 'posts/index'; または protected $redirectTo = 'posts'; | 
方法2~ルーティングファイルに追加
コントローラーが以下の様に生成直後の状態で・・・
| 1 | protected $redirectTo = RouteServiceProvider::HOME; | 
ルーティングファイルに以下の1行を追加する。
| 1 | Route::get('home', 'PostController@index'); | 
なお、上記をルーティングファイルに追加すれば、コントローラーの定義は以下でもよい。
| 1 | protected $redirectTo = 'home'; | 
ルート名は使えない
ルート名が設定されていても、以下の表現はエラーになる(Constant expression contains invalid operations)。
| 1 | protected $redirectTo = route('posts.index'); | 
ユーザー登録後の画面遷移
RegisterControllerでもデフォルトで以下の様に定義されている。
| 1 | protected $redirectTo = RouteServiceProvider::HOME; | 
LoginControllerと同じようにルーティング設定をすることで、ユーザー登録後の遷移先を設定することができる。
ユーザー認証処理の詳細
ユーザー登録処理の内容、ログイン処理の内容についてはそれぞれのリンクを参照。
2038年問題対応
Laravelでモデルの雛形を生成する場合、MySQLだと作成日時と更新日時のtimestamp型の2038年問題が内包される。
database/migrationsディレクトリー下のマイグレーションファイル、...create_users_table.phpのtimestampsをdatetime型に修正しておくべき。
ログアウト処理