Token処理について
たまにはMaple自体の話もしとかないと・・・といってもToken処理用のFilterはあくまでも標準でついてるFilterですってだけで、Mapleコアではないんですが。
一応以下のような仕様にしたいと考えてます。
- Filterへの設定値としてToken名を指定できる
- Filterへの設定値としてモードが指定できる。モードは以下のもの。(カッコ内はFilter動作時の実行場所)
- 「create」は指定されたToken名に対してランダムな値を生成し、セッションへ格納(前処理で実行)
- 「check」はリクエストで渡されたものとセッションで保持しているものを比較する。比較した結果問題があれば「notoken」か「invalidtoken」の結果を返却(前処理で実行)
- 「remove」はセッションに保持しているTokenを消去する。(後処理で実行)
- 「checkAndRemove」は「check」を前処理で、「remove」を後処理で行う。
- 「checkAndRebuild」は「check」とTokenが別の値になるようにランダムな値を再生成しセッションへ格納する処理を前処理で実行
設定ファイルのmaple.iniには以下のように記述するはず。1つ目は確認画面でTokenを埋め込んでいて、2つ目は完了画面で2重submitを防止している。2つ目ではTokenのチェックで問題があったときのテンプレートを指定している。
[Token] name = purchaseFlow mode = create [View] success = member/purchase/confirm.html
[Token] name = purchaseFlow mode = checkAndRemove [View] success = member/purchase/done.html notoken = member/purchase/notoken.html invalidtoken = member/putchase/invalidtoken.html
確認画面のテンプレートであるconfirm.htmlへのTokenの埋め込みは以下のように記述する。
<form method="post" action="xxxx.php"> <input type="hidden" name="{token->getName}" value="{token->getValue}"> </form>
これでAction本体では2重submitがおきてるとかは気にしないで処理ができます。