Guardって何
LaravelのAuthの認証に利用しているドライバークラスです。
普通のサイトを作っている場合にはほぼ見ることはないかもしれませんが、SPAを作ることになった、APIを作ることになったときに見ることになるでしょう。
想定バージョン
Laravel 5.4
設定されてる場所
config/auth.php
のguardsにあります。
標準のGuardの種類
SessionGuard
恐らく一番使われているGuard。
名前の通りSessionを利用して認証を行うGuardです。
(なお、Sessionとありますがネイティブのセッションではなく、Laravelが独自に用意したセッションの場合が多い。configのsessionのdriverを見よう。)
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を返すようなやり方です。