ホームページ ウェブフロントエンド フロントエンドQ&A vueでのトークンの使用法は何ですか

vueでのトークンの使用法は何ですか

Jan 29, 2023 am 10:31 AM
vue token

vue のトークンはサーバー側で生成される文字列で、クライアントリクエストのトークンとして利用されますが、その利用方法は以下の通りです: 1. ローカルストレージの操作方法をカプセル化する 2. in vueカプセル化 ストレージの準備ができたら、グローバル コンポーネントにマウントします; 3. "request.js" に "token" を置きます; 4. ルーターの下の "index.vue" にルーティング ガードを設定します。

vueでのトークンの使用法は何ですか

このチュートリアルの動作環境: Windows 10 システム、vue3 バージョン、DELL G3 コンピューター

トークンの使用方法についてビューで? Vue でのトークンの使用方法

##1. 使用方法を理解する
# #1. (セッション、Cookie) トークンを理解する トークンの概要: トークンとは、クライアントがサーバーに頻繁にデータを要求し、サーバーが頻繁にデータベースにアクセスしてユーザー名とパスワードを照会し、それらを比較するものです。ユーザー名とパスワードを決定し、正しいかどうかを確認し、対応するプロンプトを表示するこの文脈で、トークンが誕生しました。
トークンは、クライアント要求のトークンとしてサーバー側で生成される文字列です。フロントエンドがユーザー名/パスワードを使用してサーバーに認証を要求し、サーバー認証が成功した場合、サーバーはフロントエンドにトークンを返します。フロントエンドは、その法的ステータスを証明するために、リクエストごとにトークンを持ち込むことができます。このトークンがサーバー側で永続化されている場合 (データベースに保存されている場合など)、永続的な ID トークンになります (有効期間が設定されている場合を除く)。

2.トークンの利点 トークンはアプリケーションによって完全に管理されるため、同一生成元ポリシーを回避できます
トークンは CSRF 攻撃を回避できます
トークンはステートレスにできます、複数のサービス間で共有できます
サーバーへの負荷を軽減し、頻繁なデータベース クエリを減らし、サーバーをより堅牢にします。
1. 初めてログインするとき、フロントエンドはバックエンドのログインインターフェイスを調整し、ユーザー名とパスワードを送信します。

2. バックエンドはリクエストを受信し、ユーザー名を確認します。検証が成功すると、トークンが返されます

#3.

フロントエンドはトークンを取得し、トークンを localStorage と vuex に保存し、ルーティング ページにジャンプします

4. フロントエンドはルーティングページにジャンプするたびに

localStroage にトークンがあるかどうかを判断し、ない場合はログインページにジャンプし、あればログインページにジャンプします。対応するルーティング ページにジャンプします。

5. バックエンド インターフェイスを調整するたびに、リクエスト ヘッダーに含める必要があります。トークンを追加します。#6. バックエンドは、トークンが存在するかどうかを判断します。リクエスト ヘッダー。トークンがある場合は、トークンを取得し、トークンを検証します。検証が成功すると、データが返されます。検証が失敗した場合 (例: トークンの有効期限が切れた場合)、401 が返されます。リクエスト ヘッダーにトークンがない場合、401

が返されます 7. フロントエンドがステータス コード 401 を取得した場合、トークン情報をクリアしてログイン ページ##にジャンプします

#2. 実際の使用方法

1

.ローカルキャッシュのカプセル化方法
src配下に新規保存フォルダーを作成し、 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// 封装操作localstorage本地存储的方法  模块化 var storage = {   set(key, value) {     localStorage.setItem(key, JSON.stringify(value))   },   get(key) {     return localStorage.getItem(key) != 'undefined' ? JSON.parse(localStorage.getItem(key)) : undefined  },   getForIndex(index) {     return localStorage.key(index)   },   getKeys() {     let items = this.getAll()     let keys = []     for (let index = 0; index &lt; items.length; index++) { keys.push(items[index].key) } return keys }, getLength() { return localStorage.length }, getSupport() { return (typeof (Storage) !== &amp;#39;undefined&amp;#39;) }, remove(key) { localStorage.removeItem(key) }, removeAll() { localStorage.clear() }, getAll() { let len = localStorage.length // 获取长度 let arr = new Array(len) // 定义数据集 for (var i = 0; i &lt; len; i++) { // 获取key 索引从0开始 var getKey = localStorage.key(i) // 获取key对应的值 var getVal = localStorage.getItem(getKey) // 放进数组 arr[i] = { &amp;#39;key&amp;#39;: getKey, &amp;#39;val&amp;#39;: getVal } } return arr }}export default storage</pre><div class="contentsignin">ログイン後にコピー</div></div>2. ストレージをカプセル化した後、グローバル コンポーネントにマウントします。
メインを開きます。 js を src
の下に配置し、コードを追加します:

Vue.prototype.$storage = storage;
ログイン後にコピー

3. request.js
にトークンを置きます。リクエストとは何かについては、別のドキュメントを参照してください。 「クロスドメインの問題を解決するために、Vue が動的データ インターフェイスを正常に呼び出す方法」:
ジャンプするには、このドキュメントのリンクをクリックしてください

メソッド 2 では、具体的に request.js各ジャンプ ルートの前に説明します。 、localStroage (または vuex) にトークンがあるかどうか、または有効期限が切れているかどうかを判断します (Axios をカプセル化するリクエスト インターセプターまたはルーターのルーティング ガードに書き込むことができます)
request.js コードは次のとおりです。

import axios from &#39;axios&#39;import storage from &#39;@/storage&#39;import router from &#39;@/router&#39;// create an axios instance
const service = axios.create({
  baseURL: &#39;/api&#39;, // url = base url + request url
  timeout: 5000 // request timeout})// 添加请求拦截器,若token存在则在请求头中加token,不存在也继续请求
service.interceptors.request.use(
  config => {
    // 每次发送请求之前检测都vuex存有token,那么都要放在请求头发送给服务器,没有则不带token
    // Authorization是必须的    let tokenInfo = storage.get('TOKEN')
    const token = tokenInfo ? tokenInfo.accessToken : null
    const tokenType = token ? tokenInfo.tokenType.substring(0, 1).toUpperCase() + tokenInfo.tokenType.substring(1) + ' ' : null    if (token && tokenType) {
      config.headers.Authorization = tokenType + token    }
    return config  },
  error => {
    console.log('在request拦截器检查到错误:', error.response)
    return Promise.reject(error)
  })// respone拦截器
service.interceptors.response.use(
  response => {
    return response  },
  error => {
    // 在status不正确的情况下,判别status状态码给出对应响应    if (error.response) {
      console.log('在respone拦截器检查到错误:')
      switch (error.response.status) {
        case 204:
          error.response.data.error = '204:No Content(没有内容)'
          break
        case 401:
          // 可能是token过期,清除它
          storage.remove('tokenInfo')
          location.reload() // 刷新页面,触发路由守卫
          error.response.data.error = '401:Unauthorized(未经授权)'
          break
        case 403:
          error.response.data.error = '403:Forbidden(被禁止的)'
          break
        case 500:
          error.response.data.error = '500:服务器内部错误'
          break
        default:          return error      }
      return Promise.reject(error.response.data.error)
    }

    return Promise.reject(error)
  })export default service

4. routing and router Guardの下のindex.vueでルーティングを設定します

インデックスコード全体は次のとおりです:

import Vue from 'vue'import Router from 'vue-router'import Login from '@/views/login';import Main from '@/main/index';import tip1 from '@/views/tip1';import tip2 from '@/views/tip2';import tip3 from '@/views/tip3';import storage from '@/storage'Vue.use(Router)const routes = [{
    path: '/',
    name: 'Login',
    // redirect: '/login',
    component: Login,  },  {
    path: "/login",
    component: Login,  },  {
    path: '/Main',
    component: Main,
    children: [{
        path: '/',
        name: 'Tip1',
        component: tip1      },      {
        path: '/tip1',
        name: 'Tip1',
        component: tip1      },      {
        path: '/tip2',
        name: 'Tip2',
        component: tip2,
        meta: {
          requireAuth: true
        }
      },      {
        path: '/tip3',
        name: 'Tip3',
        component: tip3      },    ]
  }]const router = new Router({
  routes})// 设置路由守卫,在进页面之前,判断有token,才进入页面,否则返回登录页面
router.beforeEach((to, from, next) => {
  // 默认requiresAuth为false才不需要登录,其他都要
  // to.matched.some(r => r.meta.requireAuth) or to.meta.requiresAuth  if (to.matched.some(r => r.meta.requireAuth) !== false) {
    let tokenInfo = storage.get('TOKEN')
    if (tokenInfo) {
      console.log("有token")
      next();

    } else {
      storage.remove('TOKEN')
      next({
        path: "/login",
        query: {
          redirect: to.fullPath        } // 将刚刚要去的路由path(却无权限)作为参数,方便登录成功后直接跳转到该路由      });
    }

  } else {
    next(); //如果无需token,那么随它去吧  }});//暴露router实例export default router
// 1.将调用登录接口成功以后,把后端传过来的token放入本地缓存
// 2.路由跳转之前执行路由守卫,实例化一个Router对象,使用该对象内置方法beforeEach,在路由跳转前判断该页面是否设置了token,获取token
// 如果有token,next()继续执行路由跳转
// 如果没有token,跳转去登录界面
ログイン後にコピー
どのページにルーティングが必要かガード。パラメータを追加するだけです

meta: {
          requireAuth: true
        }
ログイン後にコピー
は次の学習を推奨しています:「vue ビデオ チュートリアル

以上がvueでのトークンの使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

vue.jsでJSファイルを参照する方法 vue.jsでJSファイルを参照する方法 Apr 07, 2025 pm 11:27 PM

vue.jsでJSファイルを参照するには3つの方法があります。タグ;; mounted()ライフサイクルフックを使用した動的インポート。 Vuex State Management Libraryを介してインポートします。

VueでWatchの使用方法 VueでWatchの使用方法 Apr 07, 2025 pm 11:36 PM

Vue.jsの監視オプションにより、開発者は特定のデータの変更をリッスンできます。データが変更されたら、Watchはコールバック関数をトリガーして更新ビューまたはその他のタスクを実行します。その構成オプションには、すぐにコールバックを実行するかどうかを指定する即時と、オブジェクトまたは配列の変更を再帰的に聴くかどうかを指定するDEEPが含まれます。

VUEのボタンに関数を追加する方法 VUEのボタンに関数を追加する方法 Apr 08, 2025 am 08:51 AM

HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

Vueによる前のページに戻る方法 Vueによる前のページに戻る方法 Apr 07, 2025 pm 11:30 PM

vue.jsには、前のページに戻る4つの方法があります。$ router.go(-1)$ router.back()outes&lt; router-link to =&quot;/&quot; Component Window.history.back()、およびメソッド選択はシーンに依存します。

Vueはマーキー/テキストスクロール効果を実現します Vueはマーキー/テキストスクロール効果を実現します Apr 07, 2025 pm 10:51 PM

CSSアニメーションまたはサードパーティライブラリを使用して、VUEでマーキー/テキストスクロール効果を実装します。この記事では、CSSアニメーションの使用方法を紹介します。スクロールテキストを作成し、テキストを&lt; div&gt;をラップします。 CSSアニメーションを定義し、オーバーフローを設定します:非表示、幅、アニメーション。キーフレームを定義し、アニメーションの開始と終了時にtranslatex()を設定します。期間、スクロール速度、方向などのアニメーションプロパティを調整します。

怠zyなロードVUEとはどういう意味ですか? 怠zyなロードVUEとはどういう意味ですか? Apr 07, 2025 pm 11:54 PM

Vue.jsでは、Lazy Loadingを使用すると、コンポーネントまたはリソースを必要に応じて動的にロードすることができ、初期ページの読み込み時間を短縮し、パフォーマンスを改善できます。特定の実装方法には、&lt; Keep-Alive&gt;および&lt;コンポーネントは&gt;コンポーネント。怠zyなロードは、FOUC(スプラッシュ画面)の問題を引き起こす可能性があり、不必要なパフォーマンスのオーバーヘッドを避けるために怠zyなロードが必要なコンポーネントにのみ使用する必要があることに注意してください。

Vueのバージョンを照会する方法 Vueのバージョンを照会する方法 Apr 07, 2025 pm 11:24 PM

Vue Devtoolsを使用してブラウザのコンソールでVueタブを表示することにより、Vueバージョンを照会できます。 NPMを使用して、「NPM List -G Vue」コマンドを実行します。 package.jsonファイルの「依存関係」オブジェクトでVueアイテムを見つけます。 Vue CLIプロジェクトの場合、「Vue -Version」コマンドを実行します。 &lt; script&gt;でバージョン情報を確認してくださいVueファイルを参照するHTMLファイルにタグを付けます。

See all articles