axios の 302 ステータス コード

php中世界最好的语言
php中世界最好的语言オリジナル
2018-06-08 17:30:472963ブラウズ

今回は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 をリクエストする方法

JS 操作 JSON 配列の重複排除

以上がaxios の 302 ステータス コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。