66
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LaravelのGuardに関して

Last updated at Posted at 2017-08-06

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を返すようなやり方です。

66
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
66
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?