Vueにログイン認証傍受機能を設置するアイデアを詳しく解説

Vueにログイン認証傍受機能を設置するアイデアを詳しく解説

こんにちは、バグを書くのが本当に得意なプログラマーの灰小猿です。

今日、vue と springboot が連携するプロジェクトに取り組んでいたとき、ログイン認証後に特定のページへのアクセスのみを許可するフロントエンドベースの操作を実装したかったので、この機能を実現するためのソリューションを紹介します。

まず、ログインしたかどうかを確認する方法を説明します。

1. 解決策

私の Springboot バックグラウンドでは shiro+Jwt セキュリティ フレームワークが使用されているため、ログイン後にtokenがフロントエンドにフィードバックされ、フロントエンドがそのトークンを保存するので、ブラウザにトークンがあるかどうかを確認します。ブラウザにトークンがある場合は、ログインが成功し、関連するページにアクセスできることを意味します。

トークンがない場合はログインしていないことを意味し、ログインページにジャンプします。操作を簡素化するために、検証プロセスをカプセル化しました。

注意:この方法を検証に使用する前提は、フロントエンドとバックエンドが Shiro とトークンを通じて検証され、フロントエンドがサーバーから返されたトークンを保存することです。

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 ファイルを作成し、それをカプセル化します。

思路是這樣的:まず、リクエストをインターセプトし、リクエスト内の requireAuth パラメータを取得します。パラメータが true の場合、ブラウザでトークンを取得し、現在の状態がログイン済みであるかどうかを確認します。トークンが存在する場合、リクエストは許可されます。トークンが取得されない場合、リクエストはログイン ページにリダイレクトされます。

注意:他の認証に基づいてログインする場合は、
//ローカルトークンを取得する
const トークン = ocalStorage.getItem("トークン")
検証方法は変わりますが、考え方は同じです。

コードは次のとおりです。

/**
 * ログイン認証を要求します。ログインしていない場合はページにアクセスできず、ログインページに戻ります*/
「./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()に直接アクセスします
    }
})

最后別忘了將該頁面引入到mian.js中。

//permission.js をインポートし、ユーザーがフロントエンドの権限制御を実行しますimport "./permission"

総括する

主な操作は 3 番目と 4 番目のステップです。リクエスト ルートにログイン検証パラメータを設定し、4 番目のステップにログイン傍受検証を記述して、main.js ファイルに導入すれば完了です。

この時点で、フロントエンド検証を通じてログインの傍受が完了します。

これで、Vue にログイン認証インターセプト機能を設定するアイデアの詳細な説明に関するこの記事は終了です。より関連性の高い vue ログイン認証インターセプトコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue+springbootでログイン認証コードを実現
  • Vue はグラフィック検証コードログインを実装します
  • Vueはログイン時に画像認証コードを実装します
  • Vueでのログイン検証が成功するとトークンが保存され、各リクエストはトークン操作を伝達して検証する。
  • Vueログインはログイン後に指定ページにジャンプし続ける操作をインターセプトします
  • vue+axios フロントエンドでログインインターセプションを実装する 2 つの方法 (ルーティングインターセプション、http インターセプション)
  • Vue axios ログインリクエストインターセプター
  • vue+axios でログインインターセプションを実装するためのサンプルコード

<<:  Docker デプロイメント nginx 実装プロセスのグラフィックとテキストによる詳細な説明

>>:  HTML_PowerNode 入門 Java アカデミー

推薦する

CentOS 上での MySQL 5.6 のコンパイルとインストール、および複数の MySQL インスタンスのインストールの詳細な説明

--1. mysql用の新しいグループとユーザーを作成する # ユーザー追加 -M -s /sbin...

js QRコードスキャンログインの原理についての簡単な説明

目次QRコードログインの真髄QRコードを理解するシステム認証メカニズムQRコードをスキャンしてログイ...

Docker デプロイメント Springboot プロジェクト例の分析

この記事は主に、docker デプロイメント springboot プロジェクトのサンプル分析を紹介...

Dockerは指定されたメモリで操作を実行します

次のように: -m, --memory メモリ制限。形式は数値と単位です。単位は b、k、m、g の...

MySQL binlog の使用方法の詳細な説明

binlog は、MySQL のすべての DML 操作を記録するバイナリ ログ ファイルです。 bi...

InnoDB タイプの MySql によるテーブル構造とデータの復元

前提条件: データベースを復元するために必要な .frm ファイルと .ibd ファイルを保存します...

LinuxサーバーにVueプロジェクトをデプロイする

ケース1 vue-cliはvue3プロジェクトをビルドし、プロジェクトをLinuxサーバーにアップロ...

MySQL インデックス最適化の説明

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

Vueはローカルストレージの追加、削除、変更機能を実装します

この記事では、ローカルストレージの追加、削除、変更を実装するためのVueの具体的なコードを例として紹...

HTMLメタの大きな役割

メタ属性には、name と http-equiv の 2 つがあります。 name 属性は主に、We...

条件付きコメント形式の書き方とサンプルコード

フロントエンドエンジニアとして、IE は私たちにとって馴染み深いものであるはずです。設計案を実装する...

jQuery Ajax チャットボットの実装事例

チャットボットは多くの手作業を省くことができ、顧客サービス、天気予報対応など、さまざまな状況で使用で...

JSON.stringify の簡易版の実装とその 6 つの主要機能の詳細な説明

目次序文JSON.stringify の 6 つの機能特集1特集2特集3特集4特集5特集6手動で文字...

Vue computedのキャッシュ実装原理の詳細な説明

目次計算結果を初期化する依存関係の収集アップデートを配布する総括するこの記事では、計算された初期化と...

Centos7でのパーティションのフォーマットとマウントの実装

Linux では、ハードディスクの追加やパーティションの再マウントといった状況に頻繁に遭遇します。こ...