Vue はトークンを取得してトークン ログインのサンプル コードを実装します

Vue はトークンを取得してトークン ログインのサンプル コードを実装します

ログイン認証にトークンを使用する考え方は次のとおりです。

1. 初めてログインする場合、フロントエンドはバックエンド インターフェイスを呼び出し、ユーザー名とパスワードをバックエンドに渡します。

2. バックエンドはリクエストを受信し、ユーザー名とパスワードを検証し、検証が成功したらトークン値をフロントエンドに返します。

3. フロントエンドはバックエンドから渡されたトークン値を受け取り、そのトークンをローカル loaclStorage と vuex に保存します。 (このプロジェクトでは、vue フレームワークと vuex グローバル状態管理を使用します)

4. フロントエンドルートがジャンプするたびに、localStorage にトークンがあるかどうかを判断します。ない場合はログインページにジャンプします。トークンがある場合は、対応するページにジャンプします。

5. パブリックリクエストインターフェースメソッドをパッケージ化し、バックエンドインターフェースの呼び出しを要求するたびにリクエストヘッダーにトークンを挿入します。

6. バックエンドは、リクエスト ヘッダーにトークンがあるかどうかを判断します。トークンがある場合は、トークンを取得してトークンを検証します。検証が成功すると、データが返されます。検証が失敗した場合 (たとえば、トークンの有効期限が切れている場合)、ステータス コード (通常は 401) がフロントエンドに返されます。リクエスト ヘッダーにトークンがない場合も、401 が返されます。(ステップ 6 はバックエンドによって実行され、フロントエンドはバックエンドから返されたステータスに応じて処理するだけで済みます。)

7. フロントエンドバックエンドから返されたステータスコードが 401 の場合、トークンをクリアしてログインページに移動します。

実践的なステップ

1. プロジェクト ストアの store.js ファイルにトークンを保存および削除するためのグローバル メソッドを追加します。

// store.js で、mutation でトークンを追加および削除するメソッドを追加します。import Vue from 'vue'
'vuex' から Vuex をインポートします
Vue.use(Vuex)

const state = { // グローバルに管理されるデータストレージ isLogin:'0',
	 ser:null、
	 token:localStorage.getItem('token') ? localStorage.getItem('token'):'', // トークン
};
デフォルトの新しいVuex.Storeをエクスポートします({
	州、
	getters:{ // データの変更をリッスンする getStorage(state){ // ローカルに保存されているログイン情報を取得する if(!state.token){
	        state.token = JSON.parse(localStorage.getItem(キー))
	      }
	      state.tokenを返す
	    }
	},
	突然変異:
		$_setToken(state, value) { // ストレージトークンを設定する
	        状態.トークン = 値;
	        localStorage.setItem('トークン', 値);
	    },
	    $_removeStorage(state, value){ // トークンを削除
		      localStorage.removeItem('トークン');
	    },
	}
})

2. ログイン ページ (login.vue) のログイン メソッドがインターフェイスを正常に呼び出すと、トークンはローカル ストレージ localStorage に保存されます。

// login.vue ページメソッド:{
	ログインFun(){
		this.$api.post('リクエストされたバックエンドインターフェースリンク',{
				データ:{
					userId:this.user, // ログイン名 userPwd:this.psw, // ログインパスワード }
		}).then((res) => {
			res.data.status == 200の場合{
				var userInfo = res.data.data;
				this.$store.commit('$_setToken', userInfo.token);
				Toast({ message: 'ログイン成功', type: 'success', duration: 1500}); // UI ポップアップ ウィンドウ プロンプト this.$router.push({ name:'homePage' }); // ホームページにジャンプ } else {
				Toast({ message: res.data.message, duration: 1500}); // UI ポップアップ ウィンドウ プロンプト }
		})
	}
}

3. main.js にリクエスト インターセプターを追加し、リクエスト ヘッダーにトークンを追加します。

'vue' から Vue をインポートします
'./App.vue' からアプリをインポートします。
'./router/router' からルーターをインポートします
'./store/store' からストアをインポートします

import PublicFun from './utils/publicFun' // パブリックメソッド import './mintUi' // 必要に応じて mintUi コンポーネントをインポートします。必要に応じて、mintUi.js で構成します。 import '@/assets/mui/css/mui.css' // mui.css スタイル /* axios プラグインをインポートします */
'axios' から axios をインポートします
Vue.prototype.$http = axios;

// グローバルルーティングコンストラクター。ログインしてページにジャンプするかどうかを決定します。router.beforeEach((to, from, next) => {
  if (to.matched.some(m => m.meta.requireAuth)) { // ログインが必要 if(window.localStorage.token && window.localStorage.isLogin === '1'){
      次()
    } そうでない場合 (to.path !== '/login') {
      トークンを window.localStorage.token とします。
      if (トークン === 'null' || トークン === '' || トークン === 未定義){
          次へ({パス: '/login'})
          Toast({ message: 'ログインしていないことが検出されました。操作する前にログインしてください!', 期間: 1500 })
      }
    } それ以外 {
      次()
    }
  } else { // ログインする必要はありません next()
  }
})



//パブリック URL を設定する
Axios.defaults.baseURL = "http://www.sinya.online/api/"
//リクエストインターセプターを追加する axios.interceptors.request.use(
  設定 =>{
    (ストアの状態トークン){
      config.headers.common['token'] = store.state.token
    }
    設定を返します。
  },
  エラー =>{
    //リクエストエラーが発生した場合の対処方法 return Promise.reject(error);
  })

//http レスポンス インターセプター axios.interceptors.response.use(
  応答 =>{
    応答を返します。
  },
  エラー=>{
    if (エラー.応答) {
      スイッチ(エラー.レスポンス.ステータス){
        ケース401:
          localStorage.removeItem('トークン');
          ルータ.replace({
            パス: '/views/login',
            query: {redirect: router.currentRoute.fullPath}//ログインに成功したら、現在閲覧しているページにジャンプします})
      }
    }
  })

Vue.prototype.$publicFun = PublicFun // グローバル パブリック メソッドをマウント Vue.prototype.$apps = Apps // app.js パブリック メソッド Vue.config.productionTip = false

新しいVue({
  ルーター、
  店、
  レンダリング: h => h(App)
}).$mount('#app')

トークンを見る

ここに画像の説明を挿入

退出時

returnFun(){ // ログアウト MessageBox.confirm(this.lang.logoutTip).then(action => {
	     this.$store.commit('$_removeStorage'); // ログイン情報をクリアする this.$router.push({
	         名前:'ログイン'
	     });
	     トースト({message:this.lang.logoutSuccess, 期間: 1500});
	 }).catch(()=>{})
} 

これで、トークンログインを実装するためのトークンを取得するvueのサンプルコードに関するこの記事は終了です。より関連性の高いvueトークンログインコンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMを応援してください。

以下もご興味があるかもしれません:
  • Vue はトークンの有効期限が切れると自動的にログインページにジャンプする機能を実装します
  • Vueプロジェクトでのトークン検証ログイン(フロントエンド部分)
  • Vueはユーザーログインとトークン検証を実装します
  • VUEはトークンログイン認証を実装
  • Vue ログイン登録とトークン検証の実装コード

<<:  デザインにおいて無視できないインタラクティブデザインにおける製品状態の分析

>>:  CSSペイントAPIを使用して、解像度に依存しない可変背景効果を動的に作成します。

推薦する

ORM モデル フレームワークを使用して MySQL データベースを操作する方法

ORM とは何ですか? ORM は Object Relational Mapping の略で、オブ...

JavaScript インタビュー: 配列の平坦化メソッドを実装する方法

目次1 配列のフラット化とは何ですか? 2 JS標準ライブラリの配列フラット化メソッド3 フラットメ...

ES6 ループと反復可能オブジェクトの例

この記事では、ES6 の for ... of ループについて説明します。古い方法以前は、JavaS...

Mysql の読み取り/書き込み分離期限切れに対する一般的な解決策

MySQLの読み書き分離の落とし穴読み取りと書き込みの分離の主な目的は、メイン データベースの負荷を...

HTML テーブル マークアップ チュートリアル (5): ライト ボーダー カラー属性 BORDERCOLORLIGHT

表では、左上の境界線の色を個別に定義したり、セルの右下の境界線の色を定義したりできます。これら 2 ...

Telnet は Alpine イメージの busybox-extras に移動されました

Alpine イメージの telnet はバージョン 3.7 以降、busybox-extras パ...

Ckeditor + Ckfinderを使用したJavaScriptファイルアップロードケースの詳細な説明

目次1. 準備2. 減圧3. 統合を開始する1. 準備Ckeditor_4.5.7_full + C...

ミニプログラム開発ツールのソースコードからの基本実装の分析

目次ミニプログラム開発者ツールのソースコードを表示する方法ミニプログラムアーキテクチャ設計1. ミニ...

Tomcat10 Catalinaのログの文字化けの問題を解決する

実行環境、Idea2020バージョン、Tomcat10、実行時にTomcat CatalinaLog...

画像の下部の空白部分の問題を解決する

最近のプロジェクトに取り組んでいるとき、下の図に示すように、画像を参照すると常に下部に空白スペースが...

Centos7環境でMySQL 5.6のインスタンスを複数作成する方法の詳細な説明

この記事では、CentOS 7 環境で MySQL 5.6 の複数のインスタンスを作成する方法につい...

webpack-dev-server のコア概念とケースの詳細な説明

webpack-dev-server コアコンセプトWebpack の ContentBase と ...

Dockerコンテナでユーザーを切り替えるときに権限が不足する問題を解決する方法

Docker コンテナでユーザーを切り替えると、権限が不十分であるというメッセージが表示されます。解...

新しいユーザーを作成し、MySQLに権限を付与する最も簡単な方法

ユーザーを作成します: 'oukele' によって識別されるユーザー 'ou...

VMware vCenter の不正な任意ファイルアップロードの脆弱性 (CVE-2021-21972) について

背景CVE-2021-21972 VMware vCenter における認証されていないコマンド実行...