Guard
laravel

LaravelのGuardに関して

More than 1 year has passed since last update.

Guardって何

LaravelのAuthの認証に利用しているドライバークラスです。
普通のサイトを作っている場合にはほぼ見ることはないかもしれませんが、SPAを作ることになった、APIを作ることになったときに見ることになるでしょう。

想定バージョン

Laravel 5.4

設定されてる場所

config/auth.phpのguardsにあります。

標準のGuardの種類

SessionGuard

恐らく一番使われているGuard。
名前の通りSessionを利用して認証を行うGuardです。

TokenGuard

TokenGuardはapiのトークンを利用して認証する方式です。
これは先に対象のテーブルにapiのトークンをDBに保存しておいて、このトークンがフロントからのリクエストで送られてきたら認証するという方式です。
リクエストとして投げるときはapi_tokenというキーでクエリに混ぜるか、POSTパラメータに混ぜるか、AuthorizationヘッダのBearerスキームに登録するか、PHP_AUTH_PWというヘッダパラメータを付与してリクエストをするかです。(標準なら)
正直このTokenGuardでは心もとなく感じるので、JWTやLaravel Passportを利用したAPIの認証をいずれすることになるでしょう・・・

RequestGuard

これは例外です。普通の利用ではこのRequestGuardは呼ばれません。
基本的にこのGuardは拡張するためのGuardで、Auth::viaRequestで拡張して利用します。
ここ最近はこれで認証することは少ないみたいです。
検索してもほとんどLumen5.2の話しか出てこなかった・・・!

lumenで実際に使っている所みました。
https://github.com/laravel/lumen/blob/v5.5.0/app/Providers/AuthServiceProvider.php

Guardを自分で作る

GuardはAuth::extendで作ることが出来ます。
ServiceProviderのbootメソッドに記述する必要があるので、大抵は$this->app['auth']->extend()と書くことになります。

例として、tymondesigns/jwt-authのextendを見てみます。

$this->app['auth']->extend('jwt', function ($app, $name, array $config) {
    $guard = new JwtGuard(
        $app['tymon.jwt'],
        $app['auth']->createUserProvider($config['provider']),
        $app['request']
    );

    $app->refresh('request', $guard, 'setRequest');

    return $guard;
});

上記のように、情報を与えてそのGuardを返すようなやり方です。