こんにちは、バグを書くのが本当に得意なプログラマーの 今日、vue と springboot が連携するプロジェクトに取り組んでいたとき、ログイン認証後に特定のページへのアクセスのみを許可するフロントエンドベースの操作を実装したかったので、この機能を実現するためのソリューションを紹介します。 まず、ログインしたかどうかを確認する方法を説明します。 1. 解決策私の Springboot バックグラウンドでは shiro+Jwt セキュリティ フレームワークが使用されているため、ログイン後に トークンがない場合はログインしていないことを意味し、ログインページにジャンプします。操作を簡素化するために、検証プロセスをカプセル化しました。
2. サーバーから返されたトークンをブラウザに保存するまず、サーバーから返されたトークンがフロントエンドページにどのように保存されるかを見てみましょう。 まず、ストア ファイルの下にある index.js ファイルに SET_TOKEN メソッドをカプセル化して、トークンをブラウザーに保存し、localStorage.getItem("token") を介して毎回ローカルからトークンを取得できるようにしました。また、ログアウト時にブラウザーのトークン情報をクリアする REMOVE_INFO メソッドもカプセル化しました。 ストア ファイルの index.js のコードは次のとおりです。 'vue' から Vue をインポートします 'vuex' から Vuex をインポートします Vue.use(Vuex) デフォルトの新しいVuex.Storeをエクスポートします({ 州: { // トークン: "", //ユーザー情報はブラウザトークンから直接取得できます: localStorage.getItem("token"), //デシリアライズ操作 userInfo: JSON.parse(sessionStorage.getItem("userInfo")) }, 突然変異: /**セット操作に似ています*/ //トークンに値を割り当てる SET_TOKEN: (state, token) => { state.token = トークン; // ブラウザを閉じても情報が残るようにブラウザに情報を保存します。localStorage.setItem("token", token); }, //userinfoに値を割り当てる SET_USERINFO: (state, userInfo) => { 状態.userInfo = ユーザー情報; // ブラウザを閉じるたびにセッションはクリアされ、再度ログインすると再生成されます。 // sessionStorage はオブジェクトを保存できないため、文字列の形式で保存する必要があります。 sessionStorage.setItem("userInfo", JSON.stringify(userInfo)); }, //ユーザー情報を削除する REMOVE_INFO: (state) => { //ユーザー情報を削除する場合は、すべてのユーザー情報を空に設定します。state.token = ""; 状態.userInfo = {}; localStorage.setItem("トークン", ""); sessionStorage.setItem("userInfo", JSON.stringify("")); } }, ゲッター: { /**get リクエストと同様*/ //ユーザー情報を取得するgetUser: state => { state.userInfo を返します。 } }, アクション: {}, モジュール: {} }) 3. リクエストにアクセス権限を設定するすべてのページがログインしないとアクセスできないわけではないので、ログインが必要なページにはアクセス権限を設定する必要があります。 vue では、通常、ルーターの下の index.js ファイルにアクセス ルートを設定します。ログイン権限を追加する必要のあるリクエスト ルートには、メタ属性を追加し、ブール属性 requireAuth を設定できます。この属性が true かどうかによって、ログイン検証が必要かどうかを判断します。 たとえば、BlogEdit ページはログインしているときのみアクセスでき、Login ページにはログイン権限は必要ないので、次のように設定できます。 /** * ルーティングレジストリ */ 'vue' から Vue をインポートします 'vue-router' から VueRouter をインポートします。 // 登録ページ import Login from '../views/Login.vue' '../views/BlogEdit.vue' から BlogEdit をインポートします。 Vue.use(VueRouter) 定数ルート = [ { パス: '/login', 名前: 'ログイン', コンポーネント: ログイン }, { パス: '/blog/add', 名前: 'BlogAdd', コンポーネント: BlogEdit、 // この操作はログイン後にのみ実行できることを示す権限アクセスを追加します。meta: { 認証が必要: 有効 } }, ] const ルーター = 新しい VueRouter({ モード: '履歴'、 ベース: process.env.BASE_URL、 ルート }) デフォルトルーターをエクスポートする これは、BlogEdit ページが要求されるたびに判断されます。 4. カプセル化ログイン認証ここで、設定したプロパティを検証するメソッドを記述する必要があります。したがって、src ディレクトリに permission.js ファイルを作成し、それをカプセル化します。
コードは次のとおりです。 /** * ログイン認証を要求します。ログインしていない場合はページにアクセスできず、ログインページに戻ります*/ 「./router」からルーターをインポートします。 // ルーティング設定ファイルのパラメータに従って、ルート判定ログイン router.beforeEach((to,from,next)=>{ //ルートにログイン権限が必要かどうかを判断する//record.meta.requireAuthはリクエストに含まれるパラメータです if (to.matched.some(record => record.meta.requireAuth)){ //ローカルトークンを取得する const トークン = localStorage.getItem("トークン") console.log("トークンを表示----------: " + トークン) //現在のトークン、つまりログインに使用されたトークンが存在するかどうかを判断します if (トークン){ //ログインページを指している場合は何もしない if (to.path === "/login"){ }それ以外 { //ログインページではなくトークンが存在する場合はnext()を解放します } }それ以外 { // トークンが存在しない場合は // ログインへ進む next({path:'/login'}) } }それ以外 { //ログイン認証が不要な場合は、next()に直接アクセスします } })
//permission.js をインポートし、ユーザーがフロントエンドの権限制御を実行しますimport "./permission" 総括する 主な操作は 3 番目と 4 番目のステップです。リクエスト ルートにログイン検証パラメータを設定し、4 番目のステップにログイン傍受検証を記述して、main.js ファイルに導入すれば完了です。 この時点で、フロントエンド検証を通じてログインの傍受が完了します。 これで、Vue にログイン認証インターセプト機能を設定するアイデアの詳細な説明に関するこの記事は終了です。より関連性の高い vue ログイン認証インターセプトコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker デプロイメント nginx 実装プロセスのグラフィックとテキストによる詳細な説明
>>: HTML_PowerNode 入門 Java アカデミー
--1. mysql用の新しいグループとユーザーを作成する # ユーザー追加 -M -s /sbin...
目次QRコードログインの真髄QRコードを理解するシステム認証メカニズムQRコードをスキャンしてログイ...
この記事は主に、docker デプロイメント springboot プロジェクトのサンプル分析を紹介...
次のように: -m, --memory メモリ制限。形式は数値と単位です。単位は b、k、m、g の...
binlog は、MySQL のすべての DML 操作を記録するバイナリ ログ ファイルです。 bi...
前提条件: データベースを復元するために必要な .frm ファイルと .ibd ファイルを保存します...
ケース1 vue-cliはvue3プロジェクトをビルドし、プロジェクトをLinuxサーバーにアップロ...
日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...
この記事では、ローカルストレージの追加、削除、変更を実装するためのVueの具体的なコードを例として紹...
メタ属性には、name と http-equiv の 2 つがあります。 name 属性は主に、We...
フロントエンドエンジニアとして、IE は私たちにとって馴染み深いものであるはずです。設計案を実装する...
チャットボットは多くの手作業を省くことができ、顧客サービス、天気予報対応など、さまざまな状況で使用で...
目次序文JSON.stringify の 6 つの機能特集1特集2特集3特集4特集5特集6手動で文字...
目次計算結果を初期化する依存関係の収集アップデートを配布する総括するこの記事では、計算された初期化と...
Linux では、ハードディスクの追加やパーティションの再マウントといった状況に頻繁に遭遇します。こ...