Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


apricot:usage:ja:middleware

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
apricot:usage:ja:middleware [2020/08/23 15:27]
y2sunlight [フォーム入力変換]
apricot:usage:ja:middleware [2020/09/03 13:46] (現在)
y2sunlight [Apricot ミドルウェア]
行 1: 行 1:
-> 編集中 
- 
----- 
- 
 ====== Apricot ミドルウェア ====== ====== Apricot ミドルウェア ======
  --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-07-29//  --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-07-29//
行 19: 行 15:
   * Apricot ミドルウェア   * Apricot ミドルウェア
   * [[apricot:usage:ja:controller|Apricot コントローラ]]   * [[apricot:usage:ja:controller|Apricot コントローラ]]
 +  * [[apricot:usage:ja:validation|Apricot バリデーション]]
   * [[apricot:usage:ja:provider|Apricot サービスプロバイダー]]   * [[apricot:usage:ja:provider|Apricot サービスプロバイダー]]
 +  * [[apricot:usage:ja:authentication|Apricot ユーザ認証]]
   * [[apricot:usage:ja:utility|Apricot ユーティリティ]]   * [[apricot:usage:ja:utility|Apricot ユーティリティ]]
  
行 88: 行 86:
 \\ \\
  
-===== Middleware の実装 =====+===== Middlewareの実装 =====
  
 Apricotのスケルトンで提供されているミドルウェアは、以下場所にの配置してあります。この配置は必須ではありません。適宜アプリケーションのルールで変更して下さい。 Apricotのスケルトンで提供されているミドルウェアは、以下場所にの配置してあります。この配置は必須ではありません。適宜アプリケーションのルールで変更して下さい。
行 132: 行 130:
 </code> </code>
  
-=== Middleware の設定 ===+=== Middlewareの設定 ===
  
 新しく作成したミドルウェアは、アプリケーションの設定ファイル ''/your-project/config/app.php'' に登録します。 新しく作成したミドルウェアは、アプリケーションの設定ファイル ''/your-project/config/app.php'' に登録します。
行 167: 行 165:
   * ユーザ認証(基本認証 及び セッション認証)   * ユーザ認証(基本認証 及び セッション認証)
  
-ここでは、ユーザ認証以外のミドルウェアについて説明します。ユーザ認証については後続の章をご覧ください。+ここでは、ユーザ認証以外のミドルウェアについて説明します。ユーザ認証については後続の章をご覧ください。これらのミドルウェアを適用したくない場合は、アプリケーションの設定ファイル( config/app.php )を修正して下さい。
  
 \\ \\
  
 ==== アクセスログ ==== ==== アクセスログ ====
 +
 +アクセスログのミドルウェアは、リクエストをモニタして次のプロセスを発動するだけの簡単な構造をしています。アクセスログをカスタマイズするには、このミドルウェアを修正して下さい。
  
 {{fa>folder-open-o}} ** /your-project/app/Middleware ** {{fa>folder-open-o}} ** /your-project/app/Middleware **
行 196: 行 196:
             'input' => json_encode(Input::all()),             'input' => json_encode(Input::all()),
         ];         ];
-        Log::info("$message",$data);+        Log::info($message,$data);
  
         // Calls the next Invoker.         // Calls the next Invoker.
行 204: 行 204:
 </code> </code>
  
-> TODO:+収集したログデータはinfoレベルで出力します。ログインユーザのアカウントを取得する為に、''AuthUser'' シングルトンを使用しています。このシングルトンについてはユーザ認証を参照して下さい。
  
 \\ \\
  
 ==== フォーム入力変換 ==== ==== フォーム入力変換 ====
 +
 +このミドルウェアの目的は、フォームの入力変数を変換することです。
 +
 +  * 入力値をトリミングします。
 +  * 入力値が空の場合、その値をnullにします。
 +
 +これらの変換を望まない変数については、そのキーを ''$exclude'' に登録して下さい。入力変数の変換を追加または変更するには、このミドルウェアを修正して下さい。
  
 {{fa>folder-open-o}} ** /your-project/app/Middleware ** {{fa>folder-open-o}} ** /your-project/app/Middleware **
行 247: 行 254:
 </code> </code>
  
-> TODO:+==== CSRF対策 ====
  
-\\+このミドルウェアの目的は、CSRF対策です。発行しているCSRFトークンの検証に失敗した場合は、''TokenMismatchException'' をスローして[[apricot:usage:ja:errors-logging#集約例外ハンドラー]]に処理を委ねます。
  
-==== CSRF対策 ====+CSR対策を望まないコントローラーについては、そのクラス名を ''$exclude'' に登録して下さい。
  
 {{fa>folder-open-o}} ** /your-project/app/Middleware ** {{fa>folder-open-o}} ** /your-project/app/Middleware **
行 289: 行 296:
 } }
 </code> </code>
 +
 +''CsrfToken'' はApricotコアのクラスで次の静的メソッドを持ちます。
 +
 +^メソッド^機能^
 +|generate()|セッション内のCSRFトークンが未生成の場合、それを生成してセッションに格納します。|
 +|verify():bool|フォームの入力変数とセッションに格納されているCSRFトークンを比較して同じならtrueを返します。これはHTTPメソッドがPOSTの場合のみ有効で、GETの場合は常にtrueを返します。|
 +
 +フォーム内にCSRFトークンを入力変数として埋め込む方法については、「[[apricot:usage:ja:frontend#テンプレートの継承|フロントエンドのテンプレートの継承]]」のCSRF対策の項を参照して下さい。
 +
 +アプリケーション設定( [[apricot:usage:ja:config#appphp_ファイル|config/app.php]] )の ''csrftrue.disposable'' が true の場合、CSRFトークンは使い捨てで、''verify()'' の後で削除され次の ''generate()'' で再生成されます。これが false の場合は、セッション中の間CSRFトークンの値は不変です。
  
 \\ \\
  
apricot/usage/ja/middleware.1598164025.txt.gz · 最終更新: 2020/08/23 15:27 by y2sunlight