Try T.M Engineer Blog

多摩市で生息するエンジニアが「アウトプットする事は大事だ」と思って始めたブログ

(Laravel第5回目)Laravelの認証機能について学んだ話

Laravel第5段です。
今回は(9)まで、進めたので、その復習(アウトプット)をしたいと思います。
このシリーズは今回が最後です。参考にしたサイトは以下。

www.hypertextcandy.com

(9)の作成時点

f:id:special-moucom:20190908003931p:plain

(8)から(9)までに学んだこと

  • Laravelの認証機能
  • 地味に便利なconfirmedルール(confirmation)
  • Auth::checkによる認証済みチェック
  • ファサード(Facade)とは?

Laravelの認証機能

Laravelには、認証機能がデフォルトで搭載されています。
コントローラ、ルーティングが最初から用意されているので、基本的にテンプレートを書くだけで認証機能が使えます。もちろん、カスタマイズして使えます。

地味に便利なconfirmedルール(confirmation)

あるサイトでユーザー登録を行う時、メールアドレスやパスワードを2回書く時ってありますよね?
そんなバリデーションが簡単にできるconfirmedルールというのがLaravelにはあります。

confirmedルールは、nameの値name + _confirmationの値に入力された値が同じであることを自動的にチェックしてくれます。
以下、実装サンプルです。
パスワードとパスワード(確認)に入力した値が同じであることを自動的にチェックしています。

■resources/views/auth/register.blade.php

<div class="form-group">
  <label for="password">パスワード</label>
  <input type="password" class="form-control" id="password" name="password">
</div>
<div class="form-group">
  <label for="password-confirm">パスワード(確認)</label>
  <input type="password" class="form-control" id="password-confirm" name="password_confirmation">
</div>

Auth::checkによる認証済みチェック

ユーザーが認証済みかどうかをチェックして、HTMLの表示を切り替えたい場合があります。
これもLaravelではAuth::check()と書くだけです。
以下、実装サンプルです。
@if(Auth::check())でユーザー認証済みかをチェックしてHTMLの表示を切り替えます

■resources/views/layout.blade.php

@if(Auth::check())
  <span class="my-navbar-item">ようこそ, {{ Auth::user()->name }}さん</span>
  |
  <a href="#" id="logout" class="my-navbar-item">ログアウト</a>
  <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
    @csrf
  </form>
@else
  <a class="my-navbar-item" href="{{ route('login') }}">ログイン</a>
  |
  <a class="my-navbar-item" href="{{ route('register') }}">会員登録</a>
@endif

ここで疑問があります。このAuthはどこを参照しているのでしょうか・・・
調べてみるとconfig/app.confに書いてありました。

■config/app.conf

  'Auth' => Illuminate\Support\Facades\Auth::class,

app.confにClassのパスに対してエイリアス名を書くことができます。
しかし、何でもかんでもClassにエイリアスをつけられるわけではなく、ファサード(Facade)だけのようです。

ファサード(Facade)とは?

デザインパターンの1つだそうです。
ある処理や機能をClassに纏めておいて、どこからでも呼び出せる状態にしておく方法。これにより、メイン処理で使われるClassの独立性を高めることができるそうです。
「ヘルパー関数」に似ていますね。Wikipediaにも書いてありました。

Facade パターン - Wikipedia

今回で言えばFacadeクラスを用意してAuthというエイリアスをつけておけば、Auth::check()と書くだけで、処理が呼ばれるということですね。
そうなるとFacadeクラスってstaticクラスだっけ?インスタンス化しなくていいの?など、色々と疑問が出てきます。このあたりは調べ出すと深い話になりそうなので、別記事にしたいと思います。

最後に

今回はじめてLaravelに触ってみて、Laravelの便利さ・面白さに気づくことができました。
Laravelをやろう!と決めて、何から手をつけるか色々と考えた結果、今回は上記サイトのチュートリアルを一通りやりましたが、やってよかったと思います。
引き続きLaravelを触って色々と試したいと思います。