2016年9月2日金曜日

小石につまずくとけっこう痛い Codeigniter3 csrf_token の 有効期限切れ エラー をキャッチ

オフィス狛 技術部です。

前々回(小石につまずくとけっこう痛い Codeigniter3 ファイル命名規約)、
前回(小石につまずくとけっこう痛い Codeigniter3 複数ファイル同時アップロード)に引き続き、

今回も PHP ( Codeigniter3 )で地味につまずいたことと書こうと思っております。

何度も言いますが
 Codeigniter は日本語の情報が少ない!!!
ということでよくつまずきます。

なので、自分の調べた備忘録も兼ねて、
ここにつまずきろく(記録)をためていきたいと思います。

今回のつまずきは、
『 csrf_token の有効期限切れ エラーをキャッチする 』
でした。

デフォルトの設定ですと「 error_general.html 」が表示されるようになっていますが、
弊社では、「操作に失敗しました。」といったようなその名の通り全般的なエラーの内容を表示するようにしています。

画面を放置していて動かしてみたらいきなり「操作に失敗しました。」と出るのは違和感があるので、そのままページを再読み込するようにしてほしいとの要望がありました。

どうやるのかパッと思いつかず、つまずき発生。
で、色々調べてみた結果、

「 CI_Security 」を継承して「 csrf_show_error() 」メソッドをオーバーライドすればよかったようです。

class MY_Security extends CI_Security {
    public function __construct()
    {
        parent::__construct();
    }
    public function csrf_show_error()
    {
        // エラー画面を表示したり
        // show_error('The action you have requested is not allowed.');

        // ページをリフレッシュしたり
        // header('Location: ' . htmlspecialchars($_SERVER['REQUEST_URI']));
    }
} 
参考にしたサイト:
http://stackoverflow.com/questions/14406922/prevent-from-displaying-the-default-csrf-error-page-in-codeigniter

そういえば、独自のエラーハンドリングを行う際も、
「 CI_Exceptions 」を継承してエラーメソッドをオーバーライドするのと同じだなと後々気が付きました。

パッと出てこないということはまだまだ習熟が足りてない証拠です。
改めてドキュメントを見返してみるなど勉強が必要だなと思う今日この頃でした。

足元の確認は大事ですね。

,

0 件のコメント:

コメントを投稿