ホームページ > 記事 > ウェブフロントエンド > axios の 302 ステータス コード
今回はaxiosでの302ステータスコードについてご紹介します。 以下は実際のケースです。
たとえば、ブラウザーがシングル ページ (SPA) アプリケーションを開いて、ページ上で Ajax リクエストが開始された後、しばらくしてトークン (またはセッション) が期限切れになる場合、バックエンドは 302 ステータス コードを返し、次のページにジャンプします。ログインページ。 Vue + axios を使用しているのですが、axios が 302 リクエストをインターセプトできないことがわかりました。以下の処理プロセスです。
思考
google axios 302 ハンドル axios github に関する 2 つのディスカッションを参照してください
• https://github.com/axios/axios/issues/932
• https://github.com /axios/ axios/issues/980
結論は、ブラウザによって送信された ajax リクエストに対して、サーバーは 302 ステータス コードを返し、ブラウザは独自にジャンプします。js ライブラリ (jquery) を介して ajax リクエストを直接取得することはできません。 、axios) 処理フローをカスタマイズするには、ブラウザーがリダイレクトした後の URL が対応する情報を取得するまで待つだけです。
axios は ajax を送信します -->
サーバーは 302 と場所を返します -->
サーバーは 200 を返します -->解決策は何ですか?サーバーはそれを解決するために協力する必要があります
ブラウザ (認証ではなく ajax) --> サーバーはそれが Ajax リクエストであると判断し、ログインしていないと 401 ステータス コードを返します --> ブラウザ axios 401 をインターセプトし、js /login を介してそれにジャンプします
Solution
ブラウザ側では、axios が flask フレームワークを使用してインターセプターaxios.interceptors.response.use((response) => {
return response;
}, function (error) {
if (401 === error.response.status) {
window.location = '/login';
} else {
return Promise.reject(error);
}
});
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
バックエンド コードを追加します。プロセスを確認するだけで、リクエストは ajax でログインしていない場合、ステータス コード 401 を返します
from flask import Blueprint, request, jsonify, make_response, abort from flask_login.utils import current_user, current_app apibp = Blueprint('api', 'api_bp') # 主要逻辑 def bp_login_required(): if not current_user.is_authenticated: if request.is_xhr: abort(401) else: return current_app.login_manager.unauthorized() apibp.before_request(bp_login_required) @apibp.route("/report/domains/<month>/", methods=["GET"]) def monthly_domains(month): return jsonify({}) refこの記事のケースを読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語に関する他の関連記事に注目してください。 Webサイト! 推奨読書:
vue を使用してローカル json をリクエストする方法
以上がaxios の 302 ステータス コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。