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 アカデミー

推薦する

Dockerコンテナにvimコマンドがない問題を解決する方法

問題を見つける今日、Docker コンテナ内のファイルを変更しようとしたところ、コンテナ内に vim...

Celery と Docker を使用して Django で定期的なタスクを処理する方法

Django アプリケーションを構築して拡張していくと、必然的に特定のタスクをバックグラウンドで自動...

XHTML チュートリアル: Transitional と Strict の違い

実際、XHTML 1.0 は、Transitional DOCTYPE と Strict DOCTY...

docker コンペ応募でよく使われるコマンドのまとめ

アカウントにログイン DOCKER_REGISTRY=registry.cn-hangzhou.al...

SQLシリアル番号取得コード例

この記事は主にSQLシリアル番号取得コード例を紹介します。記事ではサンプルコードを詳細に紹介しており...

Bootstrap 3.0 学習ノートボタンスタイル

この記事では主にボタンのスタイルについて説明します。 1. オプション2. サイズ3. 活動状況4....

テキストの折り畳み特殊効果を実現する HTML+CSS の例

この記事では、主に HTML + CSS を使用してテキストの折りたたみ特殊効果を実現する例を紹介し...

Vue3 でタイマーコンポーネントをカプセル化する方法

背景一部のショッピング モールの Web ページで商品の詳細を開くと、購入数量を選択するためのカウン...

Web Storage APIの使用に関する簡単な説明

目次1. ブラウザのローカルストレージ技術1.1、セッションストレージ1.2、ローカルストレージ2....

MySQL コマンドライン操作中のエンコードの問題の詳細な説明

1. MySQLデータベースのエンコーディングを確認する mysql -u ユーザー名 -p パスワ...

Dockerfile に基づいて Tomcat イメージを構築する方法

Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...

Windows ホストと Docker コンテナに共有フォルダを設定してマウントする手順

Docker コンテナ内のプログラムは、ホスト ディレクトリ内のデータにアクセスして呼び出す必要があ...

Dockerで作成したコンテナを削除する方法

Dockerで作成したコンテナを削除する方法1. まず、docker -s -aコマンドを使用してす...

JavaScript で長い画像のスクロール効果を実装する

この記事では、JavaScriptの長い画像スクロールの具体的なコードを参考までに共有します。具体的...

Vue で AES.js を使用する詳細な手順

AES暗号化の使用データ転送の暗号化と復号化処理 --- AES.js最初のステップ: vue に ...