このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
apricot:ext:session-auth [2020/05/24 15:57] y2sunlight [テスト実行] |
apricot:ext:session-auth [2020/05/25 21:03] (現在) y2sunlight [AuthController クラス] |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | > 編集中 | ||
| - | |||
| - | ----- | ||
| - | |||
| ====== Apricot セッション認証 ====== | ====== Apricot セッション認証 ====== | ||
| --- // | --- // | ||
| 行 24: | 行 20: | ||
| - | ミドルウェアを使ってユーザのセッション認証を実装します。本章ではApricotのユーザ認証機能を使用しているので、まだお読みでない方は先に[[Apricot: | + | ミドルウェアを使ってユーザのセッション認証を実装します。本章ではApricotのユーザ認証機能を使用しているので、まだお読みでない方は先に[[Apricot: |
| - | セッション認証ではログイン画面を作成してユーザ認証を行います。この認証方法ではログアウト機能が有効で、RememberMeトークンによる自動ログイン機能も実装します。比較的多くのユーザでサイトを運用する場合はこの認証方法をお薦めします。 | + | セッション認証ではログイン画面を作成してユーザ認証を行います。この認証方法ではログアウト機能が有効で、Remember-Meトークンによる自動ログイン機能も実装します。比較的多くのユーザでサイトを運用する場合はこの認証方法をお薦めします。 |
| 本機能は次の2つの部分に分かれます。 | 本機能は次の2つの部分に分かれます。 | ||
| 行 49: | 行 45: | ||
| use Core\Foundation\Invoker; | use Core\Foundation\Invoker; | ||
| use Core\Foundation\Middleware\Middleware; | use Core\Foundation\Middleware\Middleware; | ||
| - | use Core\Foundation\Security\UserAuth; | + | use App\Foundation\Security\AuthUser; |
| /** | /** | ||
| 行 78: | 行 74: | ||
| // Verify whether user is authenticated | // Verify whether user is authenticated | ||
| - | if (UserAuth::verify()) | + | if (AuthUser::verify()) |
| { | { | ||
| return $next-> | return $next-> | ||
| 行 89: | 行 85: | ||
| </ | </ | ||
| - | <WRAP left important 60%> | + | * [[apricot:ext: |
| - | TODO: 説明文 | + | |
| - | </WRAP> | + | * $this< |
| + | * AuthUser:: | ||
| + | * まだユーザ認証されていない場合は、ヘルパー関数 redirect() を呼び出してログイン画面にリダイレクトします。 | ||
| + | |||
| + | AuthUser の使用方法については、[[apricot: | ||
| \\ | \\ | ||
| 行 98: | 行 98: | ||
| セッション認証のミドルウェアをアプリケーションに設置します。 | セッション認証のミドルウェアをアプリケーションに設置します。 | ||
| - | |||
| - | > TODO: authの設定についても書く | ||
| - | > authの詳細については、[[apricot: | ||
| {{fa> | {{fa> | ||
| 行 109: | 行 106: | ||
| ' | ' | ||
| \App\Middleware\AccessLog:: | \App\Middleware\AccessLog:: | ||
| + | \App\Middleware\VerifyCsrfToken:: | ||
| // \App\Middleware\Auth\BasicAuth:: | // \App\Middleware\Auth\BasicAuth:: | ||
| \App\Middleware\Auth\SessionAuth:: | \App\Middleware\Auth\SessionAuth:: | ||
| ], | ], | ||
| + | ' | ||
| + | ... | ||
| + | ], | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ], | ||
| + | ], | ||
| + | ' | ||
| + | ' | ||
| + | ], | ||
| + | ]; | ||
| </ | </ | ||
| 行 117: | 行 130: | ||
| * middleware にセッション認証のミドルウェア \App\Middleware\Auth\SessionAuth:: | * middleware にセッション認証のミドルウェア \App\Middleware\Auth\SessionAuth:: | ||
| + | * auth.expires_sec --- RememberMeトークンクッキーの保存期間(秒単位) | ||
| + | * menu --- 画面の左上にユーザメニューを表示するか否か(既定値: | ||
| \\ | \\ | ||
| 行 136: | 行 151: | ||
| { | { | ||
| // Auth | // Auth | ||
| - | $r->get ('/ | ||
| - | $r-> | ||
| - | $r->get ('/ | ||
| $r->get ('/ | $r->get ('/ | ||
| $r-> | $r-> | ||
| 行 165: | 行 177: | ||
| use Core\Input; | use Core\Input; | ||
| - | use Core\Foundation\Security\UserAuth; | ||
| use Core\Foundation\ErrorBag; | use Core\Foundation\ErrorBag; | ||
| + | use App\Foundation\Security\AuthUser; | ||
| use App\Foundation\Controller; | use App\Foundation\Controller; | ||
| use App\Foundation\ValidatorErrorBag; | use App\Foundation\ValidatorErrorBag; | ||
| 行 175: | 行 187: | ||
| class AuthController extends Controller | class AuthController extends Controller | ||
| { | { | ||
| - | public function __construct() | ||
| - | { | ||
| - | } | ||
| - | |||
| /** | /** | ||
| * ログインフォーム表示 | * ログインフォーム表示 | ||
| 行 185: | 行 193: | ||
| public function showForm() | public function showForm() | ||
| { | { | ||
| - | if (UserAuth::check()) | + | if (AuthUser::check()) |
| { | { | ||
| // 認証済ならトップ画面表示 | // 認証済ならトップ画面表示 | ||
| 行 191: | 行 199: | ||
| } | } | ||
| - | if (UserAuth:: | + | if (AuthUser:: |
| { | { | ||
| // 自動認証できたらトップ画面表示 | // 自動認証できたらトップ画面表示 | ||
| 行 215: | 行 223: | ||
| $inputs = Input:: | $inputs = Input:: | ||
| - | if (!UserAuth:: | + | if (!AuthUser:: |
| { | { | ||
| // ユーザが見つからない | // ユーザが見つからない | ||
| 行 223: | 行 231: | ||
| // ログイン成功 | // ログイン成功 | ||
| - | return redirect(UserAuth:: | + | return redirect(AuthUser:: |
| } | } | ||
| 行 255: | 行 263: | ||
| { | { | ||
| // セッションの破棄 | // セッションの破棄 | ||
| - | | + | |
| // ログイン画面表示 | // ログイン画面表示 | ||
| 行 263: | 行 271: | ||
| </ | </ | ||
| - | <WRAP left important 60%> | + | * **showForm()** : ログイン画面表示 |
| - | TODO: 説明文 | + | * AuthUser::check() で認証チェックします。 |
| - | </WRAP> | + | * 認証済の場合: |
| + | * ヘルパー関数redirect()でトップ画面にリダイレクトします。\\ \\ | ||
| + | * 未認証の場合: | ||
| + | * AuthUser:: | ||
| + | * 成功の場合: | ||
| + | * トップ画面にリダイレクトします。 | ||
| + | * 失敗の場合: | ||
| + | * ログイン画面( login )にリダイレクトします。 | ||
| + | |||
| + | * **login()** : ログイン(認証) | ||
| + | * バリデーション( validate() )を実行します。 | ||
| + | * バリデーション全体については[[apricot: | ||
| + | * バリデーションでエラーの場合: | ||
| + | * withInputs()で入力変数をフラッシュ変数に保存します。 | ||
| + | * withErrors()でバリデーションのエラーバッグをフラッシュ変数に保存します。 | ||
| + | * redirect()でログイン画面にリダイレクトするResponseオブジェクトをします。\\ \\ | ||
| + | * Input:: | ||
| + | * AuthUser:: | ||
| + | * 成功した場合: | ||
| + | * AuthUser:: | ||
| + | * 失敗した場合: | ||
| + | * withInputs()で入力変数をフラッシュ変数に保存します。 | ||
| + | * withErrors()でバリデーションのエラーバッグをフラッシュ変数に保存します。 | ||
| + | * redirect()でログイン画面にリダイレクトするResponseオブジェクトをします。 | ||
| + | |||
| + | * **login()** : ログアウト | ||
| + | * AuthUser:: | ||
| + | * ログイン画面にリダイレクトします。 | ||
| + | |||
| + | AuthUser の使用方法については、[[apricot: | ||
| + | |||
| + | > 認証コントローラのバリデーションは(コードが少量なので)[[apricot: | ||
| \\ | \\ | ||
| 行 371: | 行 411: | ||
| </ | </ | ||
| </ | </ | ||
| - | |||
| - | <WRAP left important 60%> | ||
| - | TODO: 説明文 | ||
| - | </ | ||
| - | |||
| - | <WRAP left important 60%> | ||
| - | TODO: ソースに@csr追加 | ||
| - | </ | ||
| \\ | \\ | ||
| 行 418: | 行 450: | ||
| ... | ... | ||
| {{-- | {{-- | ||
| - | @if(app_has(' | + | @if(app('auth.menu',false)) |
| <ul class=" | <ul class=" | ||
| <a id=" | <a id=" | ||
| - | {{user()-> | + | {{AuthUser:: |
| </a> | </a> | ||
| <div class=" | <div class=" | ||
| 行 455: | 行 487: | ||
| use App\Foundation\Controller; | use App\Foundation\Controller; | ||
| + | use App\Foundation\Security\AuthUser; | ||
| /** | /** | ||
| 行 467: | 行 500: | ||
| public function index() | public function index() | ||
| { | { | ||
| - | $message = __(' | + | $message = __(' |
| return render(' | return render(' | ||
| } | } | ||
| 行 473: | 行 506: | ||
| </ | </ | ||
| - | * '' | + | |
| + | | ||
| \\ | \\ | ||
| 行 494: | 行 528: | ||
| [{{apricot: | [{{apricot: | ||
| ■ 正しいユーザ名とパスワードを入力して[ログイン]ボタンを押すと、ホーム画面が画面が表示されます。\\ | ■ 正しいユーザ名とパスワードを入力して[ログイン]ボタンを押すと、ホーム画面が画面が表示されます。\\ | ||
| - | ■ [ログイン状態を保存する]をチェックすると、ログイン状態でブラウザを閉じてもログイン状態が保持され、再度Apricotにアクセスすると自動ログイン機能が働きます。自動ログインの有効期間は[[# | + | ■ [ログイン状態を保存する]をチェックすると、ログイン状態でブラウザを閉じてもログイン状態が保持され、再度Apricotにアクセスすると自動ログイン機能が働きます。自動ログインの有効期間は[[# |
| [{{apricot: | [{{apricot: | ||