Web プロジェクト開発における 2 つのトークン理由とサンプル コードの分析

Web プロジェクト開発における 2 つのトークン理由とサンプル コードの分析

ここに画像の説明を挿入

質問:

プロジェクトには 2 つのトークンがあり、1 つは有効期間が 2 時間 (ショート トークンと呼ばれる)、もう 1 つは有効期間が 14 日間 (ロング トークンと呼ばれる) です。
なぜ 2 つのトークンを使用するのですか?

答え:

1. セキュリティ上の考慮とトークン漏洩防止のため、サーバー リソース内のすべてのリクエストでは短いトークンのみを使用でき、短いトークンの有効期間は 2 時間のみです。

  • この方法では、トークン漏洩防止の問題を完全に解決することはできませんが、トークン漏洩防止のセキュリティをある程度向上させることはできます。
  • 長いトークンの唯一の機能は、短いトークンの有効期限が切れたときに、それを使用して新しい短いトークンを要求することです。

このインターフェースでのみ、長いトークンを使用してリクエストを送信できます。

2. ユーザーエクスペリエンスを向上させるために、操作中のページからユーザーに直接終了を要求しないでください。

'vue' から Vue をインポートします
'axios' から axios をインポートします
'vue-axios' から VueAxios をインポートします
'./token' から { getToken, setToken } をインポートします。
'../router/index.js' からルーターをインポートします。
'vant' から { Toast } をインポートします
Vue.use(VueAxios、axios) を使用します
定数インスタンス = axios.create({
  baseURL: 'ベースURL',
  タイムアウト: 100000
})
// リクエストインターセプターを追加するinstance.interceptors.request.use(
  関数(設定){
    // トークンを均一に追加する
    getToken() && (config.headers['Authorization'] = `Bearer ${getToken().token}`)
    設定を返す
  },
  関数(エラー){
    Promise.reject(error) を返します。
  }
)
//レスポンスインターセプターを追加/**
 * 1. 401 の場合は無視* 2. トークンがある場合はログイン ページにジャンプ* 3. try-catch を使用して refresh_token を使用してトークンを取得し、成功した場合は refresh_token が無効な場合はログイン ページにジャンプ* 4. 取得したトークンを保存して更新し、ユーザーの希望する操作を続行*/
インスタンスインターセプターレスポンスの使用(
  関数(応答){
    応答を返す
  },
  非同期関数(エラー){
    if (401 === error.response.status) {
      setTimeout('console.clear()', 2000)
      (トークンを取得する)場合{
        試す {
          // ログインしましたが、短い T の有効期限が切れています。長い T を使用して短い T を取得します (ユーザー トークンを更新します)
          res = axios({ を待ちます
            url: 'ベースアドレス/v1_0/authorizations',
            メソッド: 'PUT'、
            ヘッダー:{Authorization: `Bearer ${getToken().refresh_token}`}
          })
          // 短いTを更新
          トークン = getToken() とする
          トークン.トークン = res.data.data.トークン
          setToken(トークン)
          // ユーザー操作を続行します。インスタンス(error.config) を返します。
        } キャッチ(エラー){
          // Long T が失敗した場合、ログイン ページにジャンプします。Toast.fail('まずログインしてください')
          router.push({ パス: '/login' })
        }
      } それ以外 {
        // ログインしていない場合はログインページに移動します Toast.fail('まずログインしてください')
        router.push({ パス: '/login' })
      }
    }
    Promise.reject(error) を返します。
  }
)
デフォルトインスタンスをエクスポートする

上記は、Webプロジェクト開発における2つのトークンの理由とサンプルコードの分析の詳細な内容です。Webプロジェクト開発の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vueでトークンを取得してヘッダーに書き込む方法
  • Vue ベースのトークン検証のサンプルコード
  • ssmプロジェクトは、ユーザーログインの永続性(トークン)を実装します。
  • Vueプロジェクトでトークン認証を使用する簡単な実践の詳細説明
  • Vueでのログイン検証が成功するとトークンが保存され、各リクエストはトークン操作を伝達して検証する。
  • Vueインターセプターはトークンの有効期限を処理します

<<:  Dockerfile テキストファイルの使用例の分析

>>:  MySQL データベースのステートメント ワイルドカード ファジー クエリの概要

推薦する

MySQL サービスに iptables ファイアウォール ポリシーを追加するためのソリューション

MySQL データベースが Centos7 システムにインストールされており、オペレーティング シス...

vue-element-adminフレームワークを使用して、バックエンドからメニュー機能を動的に取得します。

目次2. 詳しい説明2.1. asyncRoutesルーティングを追加する2.2. 新しいpermi...

WeChatミニプログラムでトークンの有効期限を処理する方法

目次まず結論から質問解決Promiseを使用してコールバック関数をカプセル化する要約するまず結論から...

Dockerはjenkins+mavenコード構築および展開プラットフォームを構築します

目次Docker の基本概念Docker インストール プロセス (Centos6.9)カーネルのア...

Alibaba Cloudのセキュリティルール設定の詳細な説明

2日前、ダブル11ショッピングフェスティバルを利用して、Alibaba CloudでECS(サーバー...

MySql のサブクエリ内のクエリ例の詳細な説明

北西を見ると私の故郷はどこにあるでしょうか。南東の満月を何度見たことがあるでしょうか。月が再びゆっく...

CSS で平均レイアウトを実現するためにネガティブ マージン テクノロジーを使用する方法

通常、IE ブラウザでの CSS の互換性の問題を解決するために、フロート レイアウトが使用されます...

MySQL 8.0.15 バージョンのインストールチュートリアル Navicat.list への接続

落とし穴1. ネット上の多くのチュートリアルでは環境変数を設定するファイル名はmy.iniと書いてあ...

CSS での配置の使用方法の詳細な研究 (要約)

CSS における位置指定の概要position属性は英語で位置を意味し、 CSSでの主な機能は要素...

MySQL 最適化戦略 (推奨)

要約すれば: 1. データベースの設計とテーブルの作成時にパフォーマンスを考慮する2. SQLの記述...

Docker環境を構築する簡単な方法

まず、Docker とは何かを理解しましょう。 Docker は、アプリケーションをデプロイするため...

SHTML 簡潔なチュートリアル

SHTMLとASPは似ています。SHTMLという名前のファイルでは、SSIの命令がASPの命令と同じ...

Windows での MySQL のダウンロード、インストール、設定、使用に関するチュートリアル

MySQLの概要MySQL はリレーショナル データベース管理システムです。データベースは構造化され...

Vue で計算プロパティを使用する際の知識ポイントのまとめ

計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...

MySQLデータベースのマスタースレーブレプリケーションと読み取り書き込み分離に関する詳細なチュートリアル

目次序文1. MySQL マスタースレーブレプリケーション1. サポートされているレプリケーションの...