フォーム認証を使用してasp.net mvcで記述されたバックエンドサーバーがあります。ユーザーが認証されない場合、サーバーは自動的に302リダイレクトをログインアクションに送信し、ログインページを返します。
クライアント側には、アイテムのリストがあります。このリストには、認証されたユーザーのみがアクセスできます。このページには、Ajax(jQueryの$ .ajax関数)を使用してリストを更新するボタンがあります。
さて、私の問題は、認証チケットがタイムアウトし、ユーザーが更新ボタンをクリックしたときです。
私が欲しいのは、認証チケットがタイムアウトになり、ユーザーが[更新]ボタンをクリックすると、それを検出し、ユーザーにログインを求めるメッセージを表示できるようにすることです。
ログインアクションにカスタムヘッダー(IS_LOGIN)を追加してこれを回避し、ajax応答で確認しました。しかし、それは良い解決策ではありません。
だから私の質問は:
返信いただきありがとうございます。
XHRの場合は呼び出しをリダイレクトするのではなく、401 Unauthorized
で応答し、コールバックでこれを処理する必要があります。 ASP.NETについては知りませんが、Spring Securityで同様のことをしました。
概念は次のとおりです。
X-Requested-With: XMLHttpRequest
のヘッダーを確認します401 Unauthorized
で応答します結論として、XHR呼び出しは、場合によっては他のHTTP要求とは異なる方法で処理する必要があります。同じリソースが別の場所にある場合にのみ、XHRをリダイレクトする必要があります。
ブラウザが自動的にリダイレクトを処理するため、XHRコールバックでリダイレクトを処理できません。リダイレクトされた場所でのみ何を取得します。