今回は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、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';
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
vue での $emit の用途は何ですか
ページジャンプを実現するためにルーターリンクを使用しないでください
以上がaxios で 302 ステータス コードを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。