シナリオは次のとおりです。
ログインページがあります。ユーザーが署名すると、ホームアプリケーションページにリダイレクトされます。次に、ユーザーはブラウザの戻るボタンを使用しており、ログインページが表示されています。彼は再度ログインしようとしますが、例外がスローされます。
HttpAntiForgeryException(0x80004005):提供された偽造防止トークンはユーザー ""を対象としていましたが、現在のユーザーは"userName"です。
これはキャッシングに関連していることを私は知っています。必要なすべてのヘッダー(no-cache、no-store、must-revalidateなど)を設定するカスタムNoCacheフィルターを使用して、ログインアクションのブラウザーキャッシュを無効にしました。
- これはすべてのブラウザで機能するわけではありません
- 特にSafari(ほとんどの場合モバイル)はそのような設定を完全に無視します
私はハックを作成し、サファリモバイルを強制的に更新しようとしますが、これは私が期待していることではありません。
できるかどうか知りたいのですが:
- ユーザーに問題が存在することを示さずに例外を処理する(ユーザーに対して完全に透過的)
- ブラウザのキャッシュに関連するハックが次のバージョンのブラウザで機能しなくなる場合は、この例外なしにユーザーが再度ログインできるようにする 偽造防止トークンのユーザー名を置き換えることで、この問題を防ぎます。
- ブラウザの動作はそれぞれ異なるため、ブラウザの動作に依存したくありません。
更新1
明確にするために、MVCでエラーを処理する方法を知っています。問題は、この処理エラーが私の問題をまったく解決していないことです。エラー処理の基本的な考え方は、素敵なメッセージを含むカスタムエラーページにリダイレクトすることです。しかし、私はこのエラーが発生するのを防ぎたいのであり、ユーザーに見える方法でそれを処理するのではありません。ハンドルとは、catch make username replaceまたは他の適切なアクションを意味し、ログインを続行します。
更新2
私のために働いている解決策を以下に追加しました。