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 データベースのステートメント ワイルドカード ファジー クエリの概要

推薦する

HTML およびプラグイン アプリケーションにおけるデータ カスタム属性の使用の概要

HTML にはデータ属性が含まれていることがよくあります。これらは HTML5 のカスタム属性です。...

独自のネイティブ JavaScript ルーターを作成する方法

目次序文導入JavaScript 履歴 API独自のネイティブJSルーティングを実装するHistor...

表に斜めヘッダー効果を出す5つの方法

誰もがテーブルをよく知っているはずです。コード内でよく見かけます。テーブルにスラッシュ ヘッダーを追...

経験豊富な人が、プロフェッショナルで標準化されたMySQL起動スクリプトの開発方法を紹介します。

シェル スクリプト言語は、すべてのプログラミング言語の中で最も単純な言語であるため、資格のある Li...

Dockerでudpポート番号を指定する問題を解決する

Docker はコンテナを起動するときにアクセス ポートを指定します。複数の -p オプションを使用...

Vueはシンプルなタイマーコンポーネントを実装します

プロジェクトを実行すると、リアルタイム更新、広告アニメーションの連続表示などの要件に遭遇することは避...

この記事では、CSSの2列レイアウトと3列レイアウトの具体的な使い方をまとめます。

序文大規模なフロントエンドの開発に伴い、UI フレームワークが次々と登場し、フロントエンド開発におけ...

mysql 5.7.19 最新バイナリインストール

まず、公式ウェブサイト http://dev.mysql.com/downloads/mysql/ ...

Webデザインチュートリアル(3):デザインの手順と考え方

<br />前のチュートリアル:Webデザインチュートリアル(2):模倣と盗作について。...

Linux QT Kit が見つからない、バージョンが空の問題の解決策

現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...

Vue3 ベースのスクリプト設定構文 $refs の使用

目次1. Vue2 構文2. Vue3の使用1. コンポーネントのref値を設定する2. コンポーネ...

Nginx の Docker インストールの問題とエラー分析

質問: DockerにNginxをインストールするときに次のエラーが発生しました: docker: ...

Windows 2019 アクティベーション チュートリアル (Office2019)

数日前、Server2019の正式版がリリースされたことを知り、面白半分でインストールしてみることに...

WeChatアプレットキャンバスが署名機能を実装

WeChatアプレットプロジェクトでは、開発モジュールに手書き署名機能が含まれ、WeChatアプレッ...

ろうそくを溶かす(水滴)サンプルコードを実現する純粋な CSS

成果を達成する実装のアイデアフィルターのコントラストとぼかしを利用して溶ける効果を実現します。親要素...