みなさん、こんにちは。怠け者メガネを購入してからより一層体を動かすことをしなくなったt-odaです。

さて、今回はログイン認証とユーザー登録のルーティングとビューについてです。ちょっとだけコントローラーのことも。ただ、処理自体はすでに用意されているのでさくっといけると思います。

ルーティング

routes.phpに書いていきます。

中級者向けだとやることが多い分ルートも多くなります。それと、初心者向けではroutes.phpに直接処理を書きましたが、それでは肥大化してしまい可読性が落ちます。なので、コントローラーファイルに処理を書くようにします。

まずは、用意されている認証処理のビューを表示させるルートを記述しましょう。routes.phpを次のように書きます。

ログイン認証は3つ、ユーザー登録は2つですね。

認証と登録のビュー

Laravelのバージョンが5.0だと認証と登録のビューはすでにあるんですが、5.1からはなくなったみたいですね。ということなのでビューを作りましょう。

ビューのディレクトリはresources/views/です。ここにauth/というディレクトリを作り、その中にlogin.blade.phpregister.blade.phpを作りましょう。バージョン5.0で用意されているものを少し編集して使っています。レイアウトは初心者向けで作ったものを使いまわします。

auth/login.blade.php

auth/register.blade.php

とてもシンプルなフォームですね。

認証と登録の処理

ビューが出来れば処理を書きましょう。と言ってもこの処理はすでに用意されています。ただ、認証の時に使うフィールドが少し違うのでそこは変更します。

まずは、コントローラーの確認です。

app/Http/Controllers/Auth/AuthController.php

Routes.phpAuthController@getLoginと指定しましたが、AuthControllergetLogin()を持っていません。ですが、トレイトを利用しているので大丈夫です。簡単に言うと、トレイトを読み込む側が読み込まれた側のメソッドを利用できるということです。そのほか、Routes.phpの認証と登録で使うメソッドもトレイトが持っています。

AuthControllerクラス内でuseしているAuthenticatesAndRegistersUsersがトレイトで、これがさらに別のトレイとを読み込んでいるので少々深くなります。

トレイトは便利な機能ですので一度調べてみるといいかと思います。

これらのトレイトは以下の場所にあります。

/vendor/laravel/framework/src/illuminate/Foundation/auth/

ここでは修正に必要な部分だけを見ていきます。

RegistersUserspostRegister()で使用している$this->redirectPath()についてです。このメソッドはRedirectsUsers.phpにあります。そして、property_exists()で指定のクラスに特定のプロパティが存在しているかをチェックしています。

  • property_exists()の第1引数:クラス
  • property_exists()の第2引数:プロパティ

プロパティチェックを2回しています。どちらのプロパティも存在しなければリダイレクト先は/homeになりますね。

ユーザー登録した後はログインした画面を開くようにしたいので、AuthController$redirectToにログイン後のパスを設定します。

次にAuthenticatesUser.phppostLogin()で使っている$this->loginUsername()についてです。これの処理はAuthenticatesUser.phpの下の方にありますが、上で設定したようにプロパティをチェックしています。

バリデーションの対象を指定しているのですが、usernameというプロパティがあればそれを参照し、無ければemailになるという処理です。

ログインで使うのはemailではなくnameにしていますので、AuthController$usernameを設定します。

ちなみに、AuthControllervalidator()create()RegistersUser.phpで定義されています。

では実際に登録してみましょう。

localhost:8000/auth/loginにアクセスします。まだユーザー登録していないので登録ページへいきましょう。

ちゃんとバリデーションしていれば、エラーを出します。バリデーションが通ればログインし、localhost:8000/tasksにリダイレクトされていると思います。

routes.phpにタスク表示のルートを指定していないのでエラーになりますが、URLがlocalhost:8000/tasksになっていれば成功です。

またlocalhost:8000/auth/logoutはログアウトの処理になります。AuthenticatesUsers.phpgetLogout()が動きますが、リダイレクトのパスが例の如くプロパティを見ています。そして無い場合は「/」にリダイレクトさせています。

なので、AuthControllerにログアウトした時のパスとして次のプロパティを設定します。

次回予告

これでユーザー登録、ログイン、ログアウトが実装されました。すでに用意されているだけあって修正も少ないですね。また、認証や登録は自前で用意してもいいので必ずこの機能を使わないといけないわけではありません。

次回は、タスクの一覧表示と作成をコントローラーで実装します。初心者向けのチュートリアルではroutes.phpにクロージャで直接処理を実装しましたが、コントローラーに任せることで役割の分担になり、可読性や保守性があがります。またコントローラーの作成もコマンド一発です。