このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
apricot:ext:user-auth [2020/05/25 09:03] y2sunlight [Apricot ユーザ認証] |
apricot:ext:user-auth [2020/06/08 11:38] (現在) tanaka [AuthUserクラス] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | > 編集中 | ||
- | |||
- | ----- | ||
- | |||
====== Apricot ユーザ認証 ====== | ====== Apricot ユーザ認証 ====== | ||
--- // | --- // | ||
行 38: | 行 34: | ||
===== コアのユーザ認証機能 ===== | ===== コアのユーザ認証機能 ===== | ||
- | Apricotのコアで提供するユーザ認証機能は、アプリケーションのモデルやデータベースに依存しない基本的なものだけです。その代わりに、アプリ側とのインターフェース(Authenticatable)を提供します。Authenticatable を使用することで、モデルやデータベースに依存しないユーザ認証機能を実装することができます。 | + | Apricotのコアで提供するユーザ認証機能は、アプリケーションのモデルやデータベースに依存しない基本的なものだけです。その代わりに、アプリ側とのインターフェース(Authenticatable)を提供します。Authenticatable を使用することで、モデルやデータベースに依存しないユーザ認証機能の基盤を実装することができます。 |
==== Authenticatableインターフェース ==== | ==== Authenticatableインターフェース ==== | ||
行 54: | 行 50: | ||
以下に、Authenticatableインターフェースのコードを示します。 | 以下に、Authenticatableインターフェースのコードを示します。 | ||
- | {{fa> | + | {{fa> |
<code php Authenticatable.php> | <code php Authenticatable.php> | ||
<?php | <?php | ||
行 121: | 行 117: | ||
Authenticationクラスを以下に示します。 | Authenticationクラスを以下に示します。 | ||
- | {{fa> | + | {{fa> |
<code php Authentication.php> | <code php Authentication.php> | ||
<?php | <?php | ||
行 510: | 行 506: | ||
' | ' | ||
], | ], | ||
- | ] | + | ], |
], | ], | ||
]; | ]; | ||
行 534: | 行 530: | ||
以下で順に説明していきます。 | 以下で順に説明していきます。 | ||
- | \\ | ||
==== ユーザモデル ==== | ==== ユーザモデル ==== | ||
+ | |||
+ | ユーザモデル( User )に[[# | ||
+ | |||
+ | {{fa> | ||
+ | <code php User.php> | ||
+ | <?php | ||
+ | namespace App\Models; | ||
+ | |||
+ | use App\Foundation\Model; | ||
+ | use ORM; | ||
+ | use Core\Foundation\Security\Authenticatable; | ||
+ | use App\Foundation\Security\AuthTrait; | ||
+ | |||
+ | /** | ||
+ | * ユーザモデル | ||
+ | */ | ||
+ | class User extends Model implements Authenticatable | ||
+ | { | ||
+ | /** | ||
+ | * Authenticatable User | ||
+ | * Includeing default implementation of Authenticatable | ||
+ | */ | ||
+ | use AuthTrait; | ||
+ | |||
+ | ... | ||
+ | } | ||
+ | </ | ||
\\ | \\ | ||
==== AuthUserクラス ==== | ==== AuthUserクラス ==== | ||
- | AuthUserクラスは、コアの [[# | + | AuthUserクラスは、コアの [[# |
使用法: ** AuthUser:: | 使用法: ** AuthUser:: | ||
行 556: | 行 578: | ||
- | {{fa> | + | {{fa> |
- | <code php Authenticatable.php> | + | <code php AuthUser.php> |
<?php | <?php | ||
namespace App\Foundation\Security; | namespace App\Foundation\Security; | ||
行 585: | 行 607: | ||
protected static function createInstance() | protected static function createInstance() | ||
{ | { | ||
- | | + | return new Authentication(new User()); |
- | | + | |
} | } | ||
} | } | ||
</ | </ | ||
+ | |||
+ | * createInstance() では、ユーザモデル( User )を使って、Authenticationクラスのシングルトンを生成しています。 | ||
+ | |||
+ | === マルチ認証 === | ||
+ | |||
+ | 同様の方法で別のモデルを使用したAuthenticationクラスのシングルトンも同時に作る事ができます。例えば、Userとは別に、AdminUserクラスやApiUserクラスも認証したいなどの例には実際によく遭遇するかもしれません。このように、Apricotでは潜在的にマルチ認証を想定した実装に仕上げていますが、これはApricotの範囲を超えているので、これ以上は触れないことにします。 | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== クラスエイリアス ==== | ||
+ | |||
+ | AuthUserクラスを[[apricot: | ||
+ | |||
+ | {{fa> | ||
+ | <code php aliases.setup.php> | ||
+ | <?php | ||
+ | // | ||
+ | // ビューテンプレートで使うクラスエイリアスを登録 | ||
+ | // | ||
+ | return function(): | ||
+ | { | ||
+ | $aliases = | ||
+ | [ | ||
+ | /* Core */ | ||
+ | .... | ||
+ | |||
+ | /* App */ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ]; | ||
+ | |||
+ | .... | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | * ValidatorErrorBag の下に AuthUserのエイリアスを追加します。 | ||
\\ | \\ | ||