この記事の例では、Vueプロジェクトでのトークン検証ログインの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。 1. はじめに現在、卒業プロジェクトに取り組んでいます。バックエンドを担当しており、フロントエンドについてはあまり詳しくありません。Vue フレームワークを 2 週間近く見てきましたが、少し初心者のように感じています。そのため、この記事はうまく書かれていない可能性があります。単なる記録です。間違っている点や不十分な点がありましたら、ご指摘ください。 2. 問題ログイン インターフェイスを作成するときに、ログインを検証するためにトークンを使用することにしました。使用したフロントエンド フレームワークは、Vue.js と element-ui です。Vue でトークンを使用してログインを検証する方法。 3. 考える1. トークンを使用してログインを検証します。ユーザーがログインすると、バックエンドはトークンを生成し、フロントエンドに返します。フロントエンドはトークンをリクエスト ヘッダーに配置し (これは Baidu のもので、通常はリクエスト ヘッダーに配置されます)、インターフェイスを呼び出してトークンをリクエスト ヘッダーに配置し、バックエンドに返します。 4. 記録と指示1. srcフォルダの下にstoreフォルダを作成し(私のvueプロジェクトはvue-cli scaffoldingで作成されています)、storeにindex.jsを作成します。 2. src/store/index.js Vue フォーム 'vue' をインポートします。 'vuex' から Vuex をインポートします。 Vue.js で Vuex をビルドします。 定数ストア = 新しい Vuex.Store({ 州: { トークン: localStorage.getItem('token') ? localStorage.getItem('token') : '' }, ミューテーション: setToken (状態、トークン) { state.token =トークン; localStorage.setItem("トークン",token.token); }, delToken(状態) { 状態.トークン = ''; localStorage.removeItem("トークン"); } } }) デフォルトストアをエクスポートします。 例: (1) src/store/index.jsにコンテンツを書き込む前に、プロジェクトにVuexをインストールする必要があります。ここではnpmのインストール方法のみを提供します。プロジェクトのルートディレクトリでcmdを開き、次のコマンドを入力してEnterキーを押します。 npm インストール vuex --save (2) この store/store/index.js で、コード token.token となっているのは、login.vue でこのメソッドを呼び出すときにオブジェクトが渡される(文字列を渡したと思っても、なぜオブジェクトに入れられるのかは分かりません)ためであり、渡されたオブジェクトには属性 token があります。 localStorage.setItem("トークン",token.token); 3. src/main.js // `import` コマンドで読み込む Vue ビルド バージョン // (ランタイムのみまたはスタンドアロン) が webpack.base.conf にエイリアスとともに設定されています。 'vue' から Vue をインポートします './App' から App をインポートします './router' からルーターをインポートします 'element-ui' から ElementUI をインポートします。 'element-ui/lib/theme-chalk/index.css' をインポートします。 'axios' から axios をインポートします 'es6-promise' から promise をインポートします './store/index' からストアをインポートします promise.polyfill() Vue.use(要素UI) Vue.config.productionTip = false axios.defaults.baseURL = 'http://192.168.80.152:8088' axios.defaults.headers.post['Content-Type'] = "application/json" axios.defaults.withCredentials = true axios.defaults.headers.common['Authorization'] = store.state.token Vue.prototype.$axios = axios /* eslint を無効にする no-new */ 新しいVue({ el: '#app', ルーター、 店、 コンポーネント: { アプリ }, テンプレート: '<App/>' }); // リクエストインターセプターを追加 axios.interceptors.request.use(config => { // リクエストを送信する前に行うべきこと // トークンが存在するかどうかを確認し、存在する場合は各ページヘッダーにトークンを追加します (ストアの状態トークン){ config.headers.common['Authorization']=store.state.token.token } 設定を返します。 }, エラー => { // リクエストエラーに対して何かを実行します。 return Promise.reject(error); }); // http レスポンス インターセプター axios.interceptors.response.use( レスポンス => { 応答を返します。 }, エラー => { if (エラー.応答) { スイッチ (エラー.応答.ステータス) { ケース401: this.$store.commit('del_token'); ルータ.replace({ パス: '/login', query: {redirect: router.currentRoute.fullPath}//ログインに成功したら、現在閲覧しているページにジャンプします}) } } Promise.reject(error.response.data) を返します。 }); 例示する (1) これが完全なコードです。このコードと同じではないかもしれません。トークン検証の使用について説明しましょう。src/main.js で何を設定すればよいでしょうか? (2) './store/index' からストアをインポートします 上記のコードは、以前に記述したsrc/store/index.jsをmain.jsにインポートします。 新しいVue({ el: '#app', ルーター、 店、 コンポーネント: { アプリ }, テンプレート: '<App/>' }); 上記のコードのストアはVueにマウントされており、this.$storeを使用してストアを取得できます。 (3) // リクエストインターセプターを追加 axios.interceptors.request.use(config => { // リクエストを送信する前に行うべきこと // トークンが存在するかどうかを確認し、存在する場合は各ページヘッダーにトークンを追加します (ストアの状態トークン){ config.headers.common['Authorization']=store.state.token.token } 設定を返します。 }, エラー => { // リクエストエラーに対して何かを実行します。 return Promise.reject(error); }); // http レスポンス インターセプター axios.interceptors.response.use( レスポンス => { 応答を返します。 }, エラー => { if (エラー.応答) { スイッチ (エラー.応答.ステータス) { ケース401: this.$store.commit('del_token'); ルータ.replace({ パス: '/login', query: {redirect: router.currentRoute.fullPath}//ログインに成功したら、現在閲覧しているページにジャンプします}) } } Promise.reject(error.response.data) を返します。 }); 上記のコードは、リクエストのリクエストヘッダーにトークンを入れるリクエストインターセプターです。 4. src/router/index.js router.beforeEach((to, from, next) => { if(to.path === '/login') { 次(); } それ以外 { トークンを localStorage.getItem('token') にします。 if(トークン === 'null' || トークン === '') { 次へ('/ログイン'); }それ以外 { 次(); } } }); 例示する (1) 上記コードはsrc/router/index.jsの設定です。ルータを公開する必要があります。コード内にexport defaultがあります。 **5. src/components/login/login.vue ** //このコンポーネントのエクスポートのデフォルトに何かを導入します。スクリプトタグ import { mapMutations } from 'vuex'; //これはメソッド部分です。メソッド: { ...mapMutations(['setToken'])、 ログイン(フォーム){ _this = this とします。 if(form.phone === "" || form.password === ""){ _this.$message.error("電話番号またはパスワードを入力してください"); }それ以外 { this.$axios.post(`/user/check/login`,_this.form).then(res => { var コード = res.data.code; var mes = res.data.message; if(コード === 1){ /* storage.setItem("token",res.data.data); _this.token = res.data.data;*/ // _this.setToken({認証: _this.token}) // console.log("成功"); _this.$message.success('ログインに成功しました'); _this.token = res.data.data; _this.setToken({トークン: _this.token}); _this.$router.push({path:"/home"}); var ストレージ = window.localStorage; //アラート(storage.getItem("トークン")); if(this.$store.state.token) { this.$router.push('/home'); console.log(this.$store.state.token.token); } それ以外 { this.$router.replace('/login'); } }それ以外{ _this.$message.error(mes); } }).catch(関数(err){ コンソールログ(エラー); _this.$message.error("ログインエラーです。プログラム開発者に連絡してください!!"); }) } } } 例示する (1) _this = this とします。 上記のコードは、変数 _this に this を入れます。関数には、通常の関数: function(){} と矢印関数の 2 種類があります。通常の関数の this は、現在のオブジェクトの参照を参照します。ここでの現在のオブジェクトは不確定です。矢印関数の this はグローバルです。this によって表されるオブジェクトは不変であり、いかなる方法でも変更できません。具体的な違いについては、「矢印関数と通常の関数の違い」を参照してください。 _this.setToken({トークン: _this.token}); 上記のコードは、src/store/index.js の setToken() メソッドを呼び出します。_this で呼び出せるのは、以前にストアが src/main.js の vue にマウントされていたためです。 ...mapMutations(['setToken'])、 src/components/login/login.vue の login() メソッドの前にコードがあります。それが何をするのかわかりません。指定されたスコアのメソッドかもしれません。これは、その中のパラメータに基づいた私の推測です。正しくないかもしれません。誰かが私にアドバイスをくれることを願っています。 以下は参考記事ですが、どれもよく書かれています。 1. Vueでトークンを取得してヘッダーに書き込む方法 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: ubuntu18.04 での qt5.12.8 のインストールと環境設定に関する詳細なチュートリアル
序文:データベースを日常的に使用すると、パスワードが単純すぎて変更する必要がある場合、パスワードの有...
この記事の例では、多人数チャットルームを実装するためのjsコードの具体的なコードを参考までに共有して...
目次k8sのコントローラータイプポッドとコントローラの関係デプロイメント(ステートレスアプリケーショ...
key_lenの意味MySQL では、次に示すように、explain を使用して SQL ステートメ...
背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...
アリアルArial は、多くの Microsoft アプリケーションとともに配布されるサンセリフ T...
この記事はmysql8.0.0 winx64.zip解凍版のインストールチュートリアルを記録していま...
目次1. ソフトウェアパッケージ2. gccをインストールする3. libfastcommonをイン...
目次序文1. 404 ページ1. 原因2. 解決策2.白い画面を更新する1. 原因2. 解決策3. ...
まず、MySQL InnoDB エンジンのストレージ形式に関する重要なポイントをいくつか紹介します。...
序文当社の MySQL オンライン環境のほとんどはバージョン 5.7.18 を使用しています。このバ...
これは今日私が踏んだ4つの落とし穴を記念したものです...落とし穴1:地元のせいエラー:エラー 39...
1. sql_modeを確認する @@sql_mode を選択照会された値は次のとおりです。 ON...
目次導入ステップ1ステップ2: アイデアで動的Webプロジェクトを作成するステップ3: Tomcat...
目次1 nginxの紹介1 nginxとは何か2 つのアプリケーション シナリオ2 nginxのイン...