Vue はトークンの有効期限が切れると自動的にログインページにジャンプする機能を実装します

Vue はトークンの有効期限が切れると自動的にログインページにジャンプする機能を実装します

このプロジェクトは最近テストされ、テスターから、トークンの有効期限が切れたため、ルートが自動的にログイン ページにジャンプしてユーザーが再度ログインできるようにするべきであるというバグが報告されました。まず、いくつかの前提条件についてお話しします。

1: 弊社のトークン有効期限は本番環境では1時間に設定されており、トークンの有効期限が切れるとすべてのインターフェースが直接戻ります。
2: ルートがジャンプするたびにトークンが判断されます。グローバルbeforeEachフック関数が設定されます。トークンが存在する場合は必要なページにジャンプし、そうでない場合は

ログインページに直接移動し、ユーザーがログインしてトークンを取得できるようにします。

インターフェースによって返される情報

{
 コード:10009、
 メッセージ: 'トークンの有効期限が切れました',
 データ:null
}

グローバルルーティングフック機能

router.beforeEach(async(to, from, next) => {
//トークンを取得
  // ユーザーがログインしているかどうかを判定する
  定数hasToken = getToken()

  (トークンを持っている場合){
  //トークンが存在する場合、現在のリダイレクトルートがログインインターフェースの場合、if (to.path === '/login') {
      // ログインしている場合はホームページにリダイレクトします
      次へ({ パス: '/' })
      NProgress.done()
    } それ以外 {
    //ここで、ユーザーがこのルートにアクセスする権限を持っているかどうかを判断するために、ユーザーの権限を削除します} catch (error) {
          // トークンを削除し、ログインページに移動して再度ログインします
          store.dispatch('user/resetToken') を待機します。
          Message.error(error || 'エラーあり')
          次へ(`/login?redirect=${to.path}`)
          NProgress.done()
        }
  } それ以外 {
    //トークンが存在しない if (whiteList.indexOf(to.path) !== -1) {
    //リダイレクトするルートがホワイトリストにある場合は、next() にジャンプします
    } それ以外 {
    // それ以外の場合はログインページにジャンプします next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})

そこで、すべてのリクエストを直接インターセプトします。応答データがコード 10009 を返すと、ユーザー情報を直接クリアしてページをリロードします。ユーザーがログインすると、トークン、名前、権限情報が store/user.js ファイルに保存され、トークンの有効期限が切れるとユーザー ファイル内の情報が消去されるため、コードを簡略化しました。このように、トークンの有効期限が切れた後、ページが更新されたりコンポーネントにジャンプしたりすると、グローバル beforeEach 判定が呼び出されます。トークン情報が存在しない場合は、ログインページに直接ジャンプします。

'axios' から axios をインポートします
'element-ui' から { MessageBox, Message } をインポートします。
'@/store' からストアをインポートします
'@/utils/auth' から { getToken } をインポートします。

constサービス = axios.create({
  ベースURL: process.env.VUE_APP_BASE_API、 
  タイムアウト: 5000 
})
// リクエスト送信時にトークンを運ぶ service.interceptors.request.use(
  設定 => {
    (store.getters.token)の場合{
      config.headers['sg-token'] = getToken()
    }
    設定を返す
  },
  エラー => {
    コンソール.log(エラー)
    Promise.reject(error) を返します。
  }
)

サービスインターセプターレスポンスの使用(
  レスポンス => {
    コンソールログ(応答データ)
    const res = レスポンス.data

    // トークンの有効期限が切れたので、ログインインターフェースに戻る if (res.code === 10009) {
      store.dispatch('user/logout').then(() => {
        場所を再読み込み(true)
      })
    }
    戻り値
  },
  エラー => {
    console.log('err' + error) // デバッグ用
    メッセージ({
      メッセージ: error.msg、
      タイプ: 'エラー'、
      期間: 5 * 1000
    })
    Promise.reject(error) を返します。
  }
)

デフォルト サービスをエクスポートする

トークンの共有については以上です。プロジェクトに応じて、上記のコードをデータに置き換えてください。

Vue を使ってトークンの有効期限が切れたら自動的にログインページに飛ぶ方法についてはこれで終了です。トークンの有効期限が切れたら自動的にログインページに飛ぶ方法についての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue クリックボタンルートを実装して指定ページにジャンプする方法
  • vueはページにジャンプし、新しいウィンドウを開き、パラメータを渡して受け取ります。
  • Vueジャンプページの4つの一般的な方法と違いのまとめ
  • Vueプロジェクトでページジャンプを実装する方法
  • vuexを使用してページにジャンプする方法
  • Vue ルーティング this.route.push ジャンプ ページが更新されない場合の解決策
  • Vueはこのプロジェクトのページ間のジャンプをどのように実現するのか

<<:  MySQL 8.0 でのチェック制約の実装

>>:  URL 書き換えモジュール 2.1 URL 書き換えモジュールのルール記述

推薦する

Windows10 HomeバージョンにDockerをインストールするときに発生する問題の概要

Docker ダウンロード アドレス: http://get.daocloud.io/#instal...

RPM パッケージを使用して MySQL 5.7.18 をインストールするチュートリアル

システム:セントOS7 RPM パッケージ: mysql-コミュニティクライアント-5.7.18-1...

Tomcatの起動が遅い問題を素早く解決、超簡単

今日、私はクラスメートが問題を解決するのを手伝いました - Tomcat の起動が非常に遅く、約 5...

セマンティックタグを使用して、IE6、7、8と互換性のあるHTMLを記述します。

HTML5 では、ヘッダー、フッター、ナビゲーションなどのセマンティック タグが追加されているため...

Docker で Selenium グリッド分散環境を構築する実用的な方法

最近、Zoom ビデオ会議をテストし、100 人が同時に会議に参加することをシミュレートする必要があ...

シンプルなカレンダー効果を実現する JavaScript コード

この記事では、シンプルなカレンダー効果を実現するためのJavaScriptの具体的なコードを参考まで...

CSS3 でクールなスライス画像カルーセル効果を実現

今日は、CSS を使用してクールな画像カルーセル コンポーネントを作成する方法を学びます。その原理は...

ウェブデザイナーが持つべき7つのスキル

Web デザインは科学であると同時に芸術でもあります。 Web デザイン作業は、半分は適切なプログラ...

VMware + Ubuntu18.04 による Hadoop クラスタ環境の構築に関するグラフィック チュートリアル

目次序文VMware クローン仮想マシン (準備、3 台の仮想マシンのクローン、1 台のマスター、2...

マウス追従ゲームを実現するjs

この記事では、マウス追従ゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な内...

Vue プロジェクトで垂直テーブルを 2 つの方法で実装するアイデアの分析

問題の説明私たちのプロジェクトでは、水平方向のテーブルが一般的ですが、必要に応じて垂直方向のテーブル...

Docker コンテナのデプロイの試み - マルチコンテナ通信 (node+mongoDB+nginx)

その理由はモッカー プラットフォームを導入したかったので、友人の勧めで既成のプロジェクト api-m...

CentOS7にNginxをインストールして自動起動を設定する方法

1.公式サイトからインストールパッケージをダウンロードするhttp://nginx.org/en/d...

js のマクロタスクとマイクロタスクについての簡単な説明

目次1. JavaScriptについて2. JavaScript イベントループ3. マクロタスクと...

フロントエンドコンポーネント化の基礎知識を詳しく解説

目次コンポーネントの基本概念オブジェクトとコンポーネントの違い成分属性属性とプロパティ属性:財産:ク...