ログインできなくなるバグと修正方法
長時間(標準では24分か30分以上)ログインページを開いたままにして、ログインをする。
1つのブラウザでログインページを2窓にして片方でログイン、ログアウトをして、もう片方でログインをする。
などの操作をすると、ログインができない。
と、ここまではいいとして、『前のページに戻る』リンクを開いてログインしようとすると、何度やってもログインできません。
これはCSRF対策にトークンを使っていることと、戻るリンクがhistory.back()になっているためです。
history.back()を使って前のページに戻ると、ページをサーバから更新しないで、ブラウザのキャッシュからページを表示します。
そうすると古いトークンを使用してしまうため、ログインできなくなります。
対処方法
/apps/pc_backend/modules/default/templates/loginError.php
の
<p><?php echo link_to_function(__('前のページに戻る'), 'history.back()') ?></p>
ここを
<p><?php echo link_to(__('前のページに戻る'), '@homepage') ?></p>
これに変えます。
/apps/pc_frontend/modules/member/templates/loginError.php
の
<?php op_include_line('backLink', link_to_function(__('Back to previous page'), 'history.back()')) ?>
ここを
<?php op_include_line('backLink', link_to(__('Back to previous page'), '@homepage')) ?>
これに変えます。
ここで@homepageとはrouting.ymlに記述されている設定項目です。
Internet Explorer8、Firefox3.6で検証。
また他のページでもhistory.back()でフォームページに戻る画面遷移が多々あり、これらでも同様の事象が発生します。
関連記事
- OpenPNEのバージョンを知る方法
- プロフィール項目の識別名にop_preset_は使えません 『正しくありません。』
- OpenPNE3のデータベースの設定
- ログインが必要なページを制限する方法
- globalNavとlocalNavのカスタマイズ(全体メニューとカテゴリごとのメニュー)
- ブロックのIDと場所
- データベーステーブルの構成を変更する カラムの追加など
- OpenPNE3のサーバ移行の方法
- Doctrineでモデルを作成する
- symfonyのORマッパ(Propel、Doctrine)
- ログイン中のメンバーID
- モバイル用の開発環境を作る方法(IP制限の解除、メールアドレスの登録)
- リンクメニューを管理している場所
- インストール直後に設定されているユーザ情報を変更するSQL文
- member_configのname_value_hashのルール
- エラーレベルを変更する方法 (Deprecated: Function eregi() is deprecated)
- インストール時の解凍に失敗する Tarのバグ(PEAR/Archive/Tar.php)
- OpenPNE3はsymfonyベース
- Symfonyのインストール
- firesymfony Symfonyデバック用Firebug拡張[Firefox]
スポンサーリンク