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を使用して、解像度に依存しない可変背景効果を動的に作成します。

推薦する

Tomcatの動作原理を分析する

SpringBoot は巨大な Python のようで、ゆっくりと私たちの周りを巻きつき、麻痺させま...

MySQL Installer Community 5.7.16 インストール詳細チュートリアル

この記事では、MySQL インストールの詳細なチュートリアルを記録し、全員と共有します。 1. バー...

スタイルを書く際の背景色宣言の重要性

タイトルの通り、ページを修正すると以下のような状況が発生する可能性があります。現在、古いページを改修...

MySQLトランザクションが効率に与える影響の分析と概要

1. データベース トランザクションによりデータベースのパフォーマンスが低下します。データの一貫性と...

Docker-compose インストール yml ファイルの設定方法

目次1. オフラインインストール2. オンラインインストール3. アンインストール4. ymlファイ...

javascript:void(0) の意味と使用例

voidキーワードの紹介まず、void キーワードは JavaScript で非常に重要なキーワード...

入力スクリプトなしでタイプ拡張を使用する方法

序文JS の型付けが弱く、記述基準が緩く、開発ツールのサポートが弱いため、前任者のコードをメンテナン...

一般的なMysql DDL操作の概要

図書館管理ライブラリを作成する データベースを作成します [存在しない場合] ライブラリ名;ライブラ...

ubuntu20.04 上の CLion2020.1.3 での ROS のインストールと設定の詳細な説明

1. CLionをダウンロード、インストール、アクティベートするオンラインで提供されるチュートリアル...

角丸四角形の HTML+CSS 実装コード

退屈していたので、突然角丸四角形の実装を思いつきました。しかし、私たちはこの話題についてあまりにも長...

Tomcat メモリ オーバーフロー問題の解決経験

少し前に、製品バージョンをテスト用にテスターに​​提出したのですが、テスト結果はまったく予想外のもの...

MySQLクエリトランザクション処理へのノード接続の実装

目次トピックmysqlの追加、削除、変更、クエリを入力しますMySQL トランザクション処理私は M...

MySQL ステートメントを使用した簡単な追加、削除、変更、クエリ操作の例

この記事では、例を使用して、MySQL ステートメントを使用して、単純な追加、削除、変更、およびクエ...

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

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

vue-routeルーティング管理のインストールと設定方法

導入Vue Router 、 Vue.jsの公式ルーティング マネージャーです。 Vue.jsのコア...