Laravel6 – ユーザー認証

 

プロジェクト開始時に作成されるファイル

Userモデル

プロジェクトを作成すると、appディレクトリー下にUser.phpが作成される。

Userモデルの内容についてはこちらを参照。

コントローラー

プロジェクトを作成すると、Controllers/Authディレクトリー下に以下の認証用コントローラー群が自動的に作成される。

ルーティング設定

ユーザー認証のためのルーティング

プロジェクト作成後にUserモデルと必要なコントローラーはLaravelにより作成されるが、ルーティングは設定が必要になる。

ルーティングファイルに以下の1行を記載すると、ユーザー認証用の各種ルーティングがまとめて定義される。

ルーティングリスト

関係するルーティングは以下の通りで、ログイン関係とユーザー登録関係が定義されている。

ビューの作成

自動作成の場合

  • php artisan ui vue --authコマンドでユーザー認証に必要なビューを作成
  • 作成されるビューはresources/views/authディレクトリー下に配置

カスタムビュー作成の場合

authディレクトリーの作成

  • resources/viewsディレクトリー下にauthディレクトリーを作成
  • 作成したauthディレクトリー下に必要なビューを定められたファイル名と内容で作成

登録用フォームビューの作成~register.blade.php

authディレクトリー下に、以下フォームを含む内容でregister.blade.phpを作成。ビュー名はLaravelが生成するコントローラーで想定されているされるため、これに合わせる必要がある。

たとえばユーザー登録フォームのビュー名はRegisterControlleruseされているRegistersUsersトレイトshowRegistrationForm()メソッドにおいて、'auth.register'として呼ばれる。

ブラウザーからURL:ドメイン名/registerでアクセスすると以下のようなフォームが表示される。

カスタマイズしていない状態で登録ボタンを押すと、URL:ドメイン名/homeにリダイレクトされる(後述のように、そのままでは404エラーになる)。

ログインフォームビューの作成~login.blade.php

authディレクトリー下に、以下のフォームを含む内容でlogin.blade.phpを作成。

ブラウザーからURL:ドメイン名/loginでアクセスすると以下のようなフォームが表示される。

カスタマイズしていない状態で登録ボタンを押すと、URL:ドメイン名/homeにリダイレクトされる。

コントローラー設定

ログイン後の画面遷移

たとえばユーザーログイン後のトップページを'posts/index'とする。

デフォルト設定~404エラー

カスタマイズしていない状態では以下の様になっているが、このままログインすると404エラーとなる。

  • ルーティングファイル→特に設定なし
  • コントローラー

このときブラウザーのURL表示はhttp://localhost:3000/homeとなっている。

方法1~コントロールファイルを変更

以下の様に$redirectToの定義を編集すると、意図したページに遷移する。

方法2~ルーティングファイルに追加

コントローラーが以下の様に生成直後の状態で・・・

ルーティングファイルに以下の1行を追加する。

なお、上記をルーティングファイルに追加すれば、コントローラーの定義は以下でもよい。

ルート名は使えない

ルート名が設定されていても、以下の表現はエラーになる(Constant expression contains invalid operations)。

ユーザー登録後の画面遷移

RegisterControllerでもデフォルトで以下の様に定義されている。

LoginControllerと同じようにルーティング設定をすることで、ユーザー登録後の遷移先を設定することができる。

ユーザー認証処理の詳細

ユーザー登録処理の内容ログイン処理の内容についてはそれぞれのリンクを参照。

2038年問題対応

Laravelでモデルの雛形を生成する場合、MySQLだと作成日時と更新日時のtimestamp型の2038年問題が内包される。

database/migrationsディレクトリー下のマイグレーションファイル、...create_users_table.phptimestampsdatetime型に修正しておくべき。

ログアウト処理

ログアウト処理についてはこちら

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です