こんにちは、バグを書くのが本当に得意なプログラマーの 今日、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 アカデミー
問題を見つける今日、Docker コンテナ内のファイルを変更しようとしたところ、コンテナ内に vim...
Django アプリケーションを構築して拡張していくと、必然的に特定のタスクをバックグラウンドで自動...
実際、XHTML 1.0 は、Transitional DOCTYPE と Strict DOCTY...
アカウントにログイン DOCKER_REGISTRY=registry.cn-hangzhou.al...
この記事は主にSQLシリアル番号取得コード例を紹介します。記事ではサンプルコードを詳細に紹介しており...
この記事では主にボタンのスタイルについて説明します。 1. オプション2. サイズ3. 活動状況4....
この記事では、主に HTML + CSS を使用してテキストの折りたたみ特殊効果を実現する例を紹介し...
背景一部のショッピング モールの Web ページで商品の詳細を開くと、購入数量を選択するためのカウン...
目次1. ブラウザのローカルストレージ技術1.1、セッションストレージ1.2、ローカルストレージ2....
1. MySQLデータベースのエンコーディングを確認する mysql -u ユーザー名 -p パスワ...
Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...
Docker コンテナ内のプログラムは、ホスト ディレクトリ内のデータにアクセスして呼び出す必要があ...
Dockerで作成したコンテナを削除する方法1. まず、docker -s -aコマンドを使用してす...
この記事では、JavaScriptの長い画像スクロールの具体的なコードを参考までに共有します。具体的...
AES暗号化の使用データ転送の暗号化と復号化処理 --- AES.js最初のステップ: vue に ...