Vue2.xは、ユーザーのログインと終了を実装するためにルーティングナビゲーションガードを設定します。

Vue2.xは、ユーザーのログインと終了を実装するためにルーティングナビゲーションガードを設定します。

序文

ここに画像の説明を挿入

以前、Vue の研究では、ユーザーログインモジュールの機能は、ルーティングナビゲーションガード制御を通じて実現されていました。今、プロジェクトを再度行う場合、同じ機能を実現するために、ルーティングナビゲーションガードを Vue で構成する必要があります。ここでは、実装プロセスを記録し、まとめます (この記事は Vue2.x に基づいて実装されています)

ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。

1. ルーティングナビゲーションガードを設定する

1. グローバルナビゲーションガード

プロジェクトにバックエンドしかない場合は、Vue でグローバル ナビゲーション ガードを設定できます。グローバル ルーティング ナビゲーション ガードを設定すると、プロジェクトが開始されている限り、ユーザーはログインしていない場合はログイン ページにのみジャンプでき、他のインターフェイスにジャンプすることはできません
vue-router依存関係をインストールするときに自動的に生成されるrouter -> index.jsフォルダに次のコードを追加します。

router.beforeEach((to, from, next) => {
  // ログインインターフェースへのアクセスの場合は直接許可します if (to.path === '/login') return next()
  //ユーザーページトークン情報を取得する let token = window.sessionStorage.getItem('token')
  //トークンデータがnullの場合は、指定されたパスにジャンプします。if (!token) return next("/login")
  次()
})

ここに画像の説明を挿入

パラメータの説明:

  • to:どのインターフェースにジャンプするか
  • from:どのインターフェースからジャンプするか
  • next: next()関数を表し解放するために使用される

2. ローカルナビゲーションガード

プロジェクト開発では、フロントエンドとバックエンドの両方を同時に開発する必要がある状況もあります。このとき、フロントエンドのインターフェースはユーザーに表示する必要があり、ユーザーはログインしていなくてもアクセスできるため、ルーティングナビゲーションガードをグローバルに設定することはできません。そのため、ルーティングナビゲーションガードはバックエンドのパスのみをインターセプトします。

ルート ナビゲーション ガードは引き続き index.js フォルダーで構成されますが、今回は単一のコンポーネントに対して構成されます。

たとえば、私のプロジェクトでは、Welcome コンポーネントはバックグラウンド コンポーネントです。このコンポーネントのルーティング ナビゲーション ガードを構成するには、まず、単一コンポーネント ナビゲーション ガードの構成で、 beforeEachのグローバル構成をbeforeEnterに置き換えます。

ここに画像の説明を挿入

作者は以前、ログイン コンポーネントでルーティング ナビゲーション ガードを設定しましたが、機能しませんでした。今後このようなミスをしないように、ここに記録しておきます。コンポーネントに次のコードを追加するだけです。

// ルートナビゲーションガードを定義する beforeEnter(to, from, next) {
      //ユーザーページトークン情報を取得する let token = window.sessionStorage.getItem('token')
      //トークンデータがnullの場合は、指定されたパスにジャンプします。if (!token) return next("/login")
      次()
    }

ローカル ナビゲーション ガードのパラメータは、グローバル構成のパラメータと一致しています。 beforeEach beforeEnterに置き換えることを除いて、残りは同じです。ここでは詳細には触れません。

2. ユーザーログイン

ここではフロントエンド コードのみを示します。バックエンド コードの書き方は人それぞれ異なるため、ここでは示しません。

1. axios の設定

プロジェクト内のコールバック地獄の問題を回避するために、ここでaxiosプラグインをインポートし、main.jsファイルで事前にaxiosを設定しました。

/* axios パッケージをインポート */
'axios' から axios をインポートします

/* axios のリクエストルートディレクトリを設定します*/
axios.defaults.baseURL = 'http://localhost:8089/'
/* vue オブジェクトにグローバル オブジェクトを追加し、$http オブジェクトを使用して Ajax リクエストを送信します */
Vue.prototype.$http = axios

グローバル構成は main.js ファイルで実行されるため、設定されたリクエスト ルート ディレクトリを表す$httpコンポーネントに表示されます。ここではhttp://localhost:8089/です。

2. ユーザーログインコード

// ログインボタンがクリックされたら、バックグラウンドにデータを送信します login() {
  this.$refs.loginFormRef.validate(非同期有効 => {
    if(!valid) 戻り値
    const {data: result} = this.$http.post("/user/login",this.loginForm) を待機します。
    // 返されたパラメータのステータス コードが 200 でない場合は、ログインに失敗したことを意味します。if(result.status !== 200) return this.$message.error("User login failed")
    this.$message.success("ユーザーのログインに成功しました")
    //ログインが成功したら、トークン情報をセッションウィンドウに保存します。sessionStorage.setItem('token',result.data)
    //バックエンド管理システムのホームページにジャンプします this.$router.push("/welcome")
})

3. ユーザー終了

ユーザーがログアウトするときは、セッション内のトークンデータを削除して他のページにジャンプするだけで済みます。このとき、ルーティングナビゲーションガードが再び有効になるため、バックエンドに接続せずにフォアグラウンドで実装できます

1. 実装コード

ログアウト() {
  //1. セッション内のデータを削除する window.sessionStorage.clear()
  //2. ユーザーがログインページにアクセスする this.$router.push('/login')
}

要約する

上記は、Vue でルーティングナビゲーションガードを設定した後、ユーザーのログインとログアウトを実現する機能です。実装には、プロジェクトにログインしないとインターフェースにアクセスできない状況と、ユーザーがログインしていなくてもフロントデスクを閲覧できる状況の 2 つがあります。最初のケースでは、グローバル構成のみを実行する必要があります。 2 番目のケースでは、ログイン後にジャンプするコンポーネントで単一コンポーネント ルーティング ナビゲーションを構成するだけで済みます。

これで、Vue2.x ルーティング ナビゲーション ガードを設定してユーザーのログインとログアウトを実装する方法についての説明は終わりです。Vue ルーティング ガードのログインとログアウトに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue2.0 と DataTable プラグインを組み合わせてテーブルを動的に更新する方法の詳細な説明
  • vue3とvue2の利点の比較
  • Vue2.0/3.0 での provide と inject の使用例
  • vue2.x の徹底研究 - h 関数の説明
  • Vue2.x の応答性の簡単な説明と例
  • Vue3とVue2の利点のまとめ
  • Vue2は応答性を提供するためにprovide injectを実装しています
  • レスポンシブ原則と Vue2.0/3.0 の違いについての簡単な分析
  • vue.config.js からプロジェクト最適化までの vue2.x 構成
  • 手書きの Vue2.0 データハイジャックの例
  • Vue2.x - アンチシェイクとスロットリングの使用例
  • ソースコードから、Vue2がデータとメソッドを直接取得できる理由がわかる

<<:  MySQL 8.0.19 インストールチュートリアル

>>:  Docker のホスト間コンテナ通信オーバーレイ実装プロセスの詳細な説明

推薦する

VMware Workstation Pro 16 ライセンス キーと使用方法のチュートリアル

VMware Workstation は、開発、テスト、デモンストレーション、展開のために仮想マシン...

Axios はリクエストをキャンセルし、重複リクエストを回避します

目次起源現状リクエストをキャンセル cancelTokenリクエスト方法の変更重複したリクエストを避...

MySQL における datetime と timestamp の違いと選択

目次1 違い1.1 スペース占有1.2 表現範囲1.3 タイムゾーン2 テスト3つの選択肢MySQL...

mysql8.0.23 Linux (centos7) のインストールの完全かつ詳細なチュートリアル

目次リレーショナルデータベースとは何ですか?非リレーショナルデータベースとは何ですか? MySQL ...

InnoDBのインデックスページ構造、挿入バッファ、適応ハッシュインデックスについての簡単な説明

InnoDB インデックスの物理構造すべての InnoDB インデックスは Btree インデックス...

MySQLストレージエンジンについて学びましょう

目次序文1. MySQL メインストレージエンジン: 2. さまざまなストレージエンジンがテーブルを...

MySQL 8の新機能である降順インデックスの基礎となる実装の詳細な説明

降順インデックスとは何ですか?インデックスについてはよくご存知かもしれませんが、降順インデックスにつ...

CSSアニメーションを途中で止めて姿勢を維持する方法

序文かつて、難しい問題に遭遇しました。タワークレーンからスイングハウスを落下させる必要がありましたが...

純粋なCSSを使用してスイッチ効果を実現する

まずアイデアはこの効果を実現するには、 <input type="checkbox&...

MYSQL大規模書き込み問題の最適化の詳細な説明

概要: MySQL のパフォーマンス最適化について話すとき、誰もがクエリ パフォーマンスを向上させる...

WeChat アプレットのカスタム タブバー コンポーネント

この記事では、WeChatアプレットのカスタムタブバーコンポーネントの具体的なコードを参考までに紹介...

JavaScript 配列 sort() メソッドの基本的な使い方と落とし穴

序文日常のコード開発では、配列のソートに関連する操作が多数あります。JavaScript では、so...

CSS マルチカラムレイアウトソリューション

1. 固定幅+適応型期待される効果: 左側は固定幅、右側は適応幅 共通コード: html: <...

Windows での自動展開に Jenkins を使用するチュートリアル図

今日は、Jenkins + powershell スクリプトを使用して、.NET CORE スクリプ...

IE 8/Chrome/Firefox と互換性のあるコメント返信ポップアップマスク効果実装アイデア

平日はニュースに注目して、テンセントをよく閲覧しています。しかし、コメントへの返信はほとんど見られま...