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 のホスト間コンテナ通信オーバーレイ実装プロセスの詳細な説明

推薦する

HTML フォーム_PowerNode Java アカデミー

1. フォーム1. フォームの役割HTML フォームは、さまざまな種類のユーザー入力を受け取り、ユー...

MySQL設定ファイルを変更できない問題の解決方法(Win10)

他の人のために解決した問題を記録します。問題の説明MySQLのバージョンは5.7、オペレーティングシ...

MySQLは既存のコンテンツを保持し、後でコンテンツを追加します

このコマンドは、データ テーブル ff_vod を変更し、vod_url フィールドの内容の後に 9...

エンタープライズプロダクション MySQL 最適化入門

Oracle、DB2、SQL Server などの他の大規模データベースと比較すると、MySQL に...

Vue3を使用してjsで呼び出せるコンポーネントを実装する

目次序文1. 従来のVueコンポーネント1. メインコンポーネントコード: 2. 使用方法3. 成果...

Vue でのテキストエリア適応高さソリューションの実装

目次隠れた問題適応高さのソリューションまず解決策を提示してください。Vueスタックが必要な学生はvu...

Ubuntu 18.04にMySQL 5.7をインストールする

この記事は MySQL 公式サイトを参考にしてまとめたものであり、遭遇したいくつかの問題も記録されて...

Linux でシステム ディスクを初期化した後にデータ ディスクを再マウントする方法

Linuxインスタンスでシステムディスクを初期化した後、データディスクを再マウントするLinux イ...

Alibaba Cloud Server の詳細な展開 (グラフィック チュートリアル)

最近、Web 開発のフロントエンドとバックエンドの技術を学んだので、その後の管理を容易にするためにプ...

MySQLの共通関数を使用してJSONを処理する方法

公式ドキュメント: JSON 関数名前説明JSON_APPEND() JSONドキュメントにデータを...

div の特定の実装は自動的に折り返されず、HTML で折り返されないよう強制されます。

1. 改行なしを実現するには<nobr>タグを使用するコードをコピーコードは次のとおりで...

vueプロジェクトは特定の領域に透かしを描くことを実現する

この記事では、Vueを使用して特定の領域に透かしを描く方法を紹介します。具体的な内容は次のとおりです...

Linux で MySQL 8.0 バージョンをアンインストールする方法

1. MySQLをシャットダウンする [root@localhost /]# サービスmysqldを...

MySQLでよく使われる演算子と関数の概要

まずデータ テーブルを作成しましょう。 使用テスト; テーブル「従業員」を作成します( emp_no...

Vueはボタン切り替え画像を実装します

この記事では、ボタン切り替え画像を実現するためのVueの具体的なコードを例として紹介します。具体的な...