Laravelの認証関連概念
Laravelの認証関連のclass, interfaceの意味をメモする。
どのクラスを組み合わせて使うか、といったことは config/auth.php で設定される。
公式と日本語訳はこちら。
https://laravel.com/docs/5.5/authentication
https://readouble.com/laravel/5.5/ja/authentication.html
雑UML
http://www.plantuml.com/plantuml/png/ROz1oi8m58JtESNGvG-zGFc5kd8hWWT8cwa6spnvUGbuUqLT57Kxy_4DqsVpQcMPtRROcSdYwCqFC_7NjjWLhm4T_h5gcLqI8mOnamKolR0EewGfdd3X3HiqGMEbDkwd-9YfUvKQ0_NfFz0qidwxr-JdnFMTDwvd2eyJTm00.png
Auth\Guard
警備員のことなのか。認証情報の操作を定義したインタフェース。
https://github.com/laravel/framework/blob/5.8/src/Illuminate/Contracts/Auth/Guard.php
check():bool
guest():bool
user():object
id():string|int
validate():bool
setUser($user):void
雑にいうと、ユーザーオブジェクトを使って行う認証系の処理を抽象化したもの。
Authenticatableを引数・戻り値として扱う。
SessionGuard::attempt は認証処理の代表例
Auth\Factory
Guardの作り分けをするクラス
Auth\UserProvider
認証処理の実装を定義したインタフェース。これはServiceProviderではなくContractである。
https://github.com/laravel/framework/blob/5.8/src/Illuminate/Contracts/Auth/UserProvider.php
retrieveById():object
retrieveByToken():object
updateRememberToken($user, token):void
retrieveByCredentials($cred):object
validateCredentials($user, $cred):bool
雑にいうと、DBのユーザーテーブルからユーザーオブジェクトを取ってくるもの。
Authenticatableを引数・戻り値として扱う。
Auth\Authenticatable
認証可能なもの。ユーザーとして振る舞うために必要なメソッドのinterface。
getAuthIdentifierName():string
getAuthIdentifier():mixed
getAuthPassword():string
getRememberToken():string
setRememberToken($token):viod
getRememberTokenName():string
Illuminate\Foundation\Auth\Userが具象クラス例。
デフォルトの実装 App\User は↑を継承し、通知系のtraitを取り込んだりDBカラムの定義をしている。
雑にいうと、DBのユーザーテーブルのレコードから作られるユーザーオブジェクトそのもの。
-----
雑感
用語の不統一が気になる
Userが「Authenticatable」なら、
Guardは「Authenticator」
UserProviderは「AuthenticatableProvider」
ではなかろうか?
もしくは User, UserGuard, UserProvider ならわかる
実際 use Authenticatable as UserContract としているコードがある
Guardのconfigキーも合ってないような気がする