Help us understand the problem. What is going on with this article?

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

fagai
Webプログラマだよー、LaravelとDockerやるよー
http://blog.fagai.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした