ホームページ  >  記事  >  ウェブフロントエンド  >  axios で 302 ステータス コードを処理する方法

axios で 302 ステータス コードを処理する方法

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-28 15:50:326066ブラウズ

今回は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 での $emit の用途は何ですか

ページジャンプを実現するためにルーターリンクを使用しないでください

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

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