ホームページ >ウェブフロントエンド >jsチュートリアル >axios の 302 ステータス コードの問題を解決する方法

axios の 302 ステータス コードの問題を解決する方法

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-25 14:15:444421ブラウズ

今回は、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';
バックエンド コードを追加します。プロセスを確認するだけで、リクエストは 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 の select 組み込みコンポーネントを使用する手順の詳細な説明

React を使用する場合は再レンダリングを避ける

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

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