ログイン認証にトークンを使用する考え方は次のとおりです。 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を応援してください。 以下もご興味があるかもしれません:
|
<<: デザインにおいて無視できないインタラクティブデザインにおける製品状態の分析
>>: CSSペイントAPIを使用して、解像度に依存しない可変背景効果を動的に作成します。
ORM とは何ですか? ORM は Object Relational Mapping の略で、オブ...
目次1 配列のフラット化とは何ですか? 2 JS標準ライブラリの配列フラット化メソッド3 フラットメ...
この記事では、ES6 の for ... of ループについて説明します。古い方法以前は、JavaS...
MySQLの読み書き分離の落とし穴読み取りと書き込みの分離の主な目的は、メイン データベースの負荷を...
表では、左上の境界線の色を個別に定義したり、セルの右下の境界線の色を定義したりできます。これら 2 ...
Alpine イメージの telnet はバージョン 3.7 以降、busybox-extras パ...
目次1. 準備2. 減圧3. 統合を開始する1. 準備Ckeditor_4.5.7_full + C...
目次ミニプログラム開発者ツールのソースコードを表示する方法ミニプログラムアーキテクチャ設計1. ミニ...
実行環境、Idea2020バージョン、Tomcat10、実行時にTomcat CatalinaLog...
最近のプロジェクトに取り組んでいるとき、下の図に示すように、画像を参照すると常に下部に空白スペースが...
この記事では、CentOS 7 環境で MySQL 5.6 の複数のインスタンスを作成する方法につい...
webpack-dev-server コアコンセプトWebpack の ContentBase と ...
Docker コンテナでユーザーを切り替えると、権限が不十分であるというメッセージが表示されます。解...
ユーザーを作成します: 'oukele' によって識別されるユーザー 'ou...
背景CVE-2021-21972 VMware vCenter における認証されていないコマンド実行...