ログイン認証にトークンを使用する考え方は次のとおりです。 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を使用して、解像度に依存しない可変背景効果を動的に作成します。
目次1. ルートパスワードを忘れてしまい、データベースにアクセスできない: DBA にとって、スーパ...
URL: http://hostname.com/contextPath/servletPath/p...
ReadOnly 属性を持つ TextBox は、クライアント上で次のマークアップとして表示されます...
目次pom 構成Setting.xml 構成ログインステータスログインが必要ですログインは必要ありま...
目次1. 元の値と参照値2. インスタンス3. 範囲1. 元の値と参照値6 つの単純なデータ型の値は...
Flex レイアウトの紹介英語の Flex はフレキシブル ボックス、つまり伸縮性のあるボックスを...
コードをコピーコードは次のとおりです。 <html> <ヘッド> <ス...
目次WXS レスポンス イベントプランAページ構造とスタイルWXS イベントコールバック関数WXS ...
開発者が Dockerfile を使用してイメージをビルドする場合は、イメージをビルドするときにデー...
以前の就職面接で面接官が尋ねた質問を覚えています。「インライン要素とは何ですか。ブロックレベル要素と...
以前、純粋な CSS を使用して波の効果を実現する方法をいくつか紹介しました。それらについては、次の...
目次動画最優秀選手ムヴヴムVueのソーススパ mpa要素を作成するクラス要約する動画 Model(模...
最近、私たちの小さなチームは、サーバー上の共有フォルダーを共有して、全員がパブリックリソースドキュメ...
1. マスタースレーブレプリケーションとは何ですか?マスター データベースの DDL および DML...
1. HTMLコードコードをコピーコードは次のとおりです。経験値: <span class=...