ログインインターセプションを実装するためのVueルーティング

ログインインターセプションを実装するためのVueルーティング

1. 概要

プロジェクト開発では、ルートが切り替わったりページが更新されたりするたびに、ユーザーがログインしているかどうかを判断する必要があります。フロントエンドでこの判断を行うこともできますし、バックエンドでもこの判断を行います。フロントエンドでもこの判断を行うのが最適です。

vue-router は、ルートが変更される前と後にトリガーされるグローバル プレナビゲーション フック beforeEach とグローバル ポストナビゲーション フック afterEach というナビゲーション フックを提供します。そのため、beforeEachナビゲーションフックでユーザーがログインしているかどうかを判断する必要があります。

ナビゲーション フックには 3 つのパラメーターがあります。

1. to: 入力するターゲットルーティングオブジェクト。

2. from: 現在のナビゲーションがこれから出発するルート オブジェクト。

3. next: このメソッドを呼び出した後にのみ、次のフック関数 (afterEach) に入ることができます。

next()//to が指すルートに直接移動します
next(false) //現在のルートを中断する
next('route') // 指定されたルートにジャンプ
next('error') //エラールートへジャンプ

2. ログインインターセプションを実装するためのルーティングナビゲーションガード

ここでは、空の vue プロジェクトを使用してデモンストレーションを行います。主に、ホームページとログインの 2 つのページがあります。

ホームページにアクセスするときはログインする必要があります。ログインしないと、ログイン ページにリダイレクトされます。

空のvueプロジェクトを作成し、src\componentsにLogin.vueを作成します。

<テンプレート>
 <div>これはログインページです</div>
</テンプレート>

<スクリプト>
 エクスポートデフォルト{
  名前: 「ログイン」
 }
</スクリプト>

<スタイルスコープ>

</スタイル>

src\router\index.js を変更する

'vue' から Vue をインポートします
'vue-router' から Router をインポートします。
'@/components/HelloWorld' から HelloWorld をインポートします。
'@/components/Login' からログインをインポートします。


Vue.use(ルーター)

const router = 新しいルーター({
 mode: 'history', // URL 内の # を削除します
 ルート: [
 {
  パス: '/login',
  名前: 'ログイン',
  メタ: {
  タイトル: 「ログイン」
  requiresAuth: false, // false はログインが不要であることを意味します},
  コンポーネント: ログイン
 },
 {
  パス: '/'、
  名前: 'HelloWorld',
  メタ: {
  タイトル: 'ホームページ'、
  requiresAuth: true, // true はログインが必要であることを意味します},
  コンポーネント: HelloWorld
 },

 ]
})

// ルーティングインターセプション、ログインが必要かどうかを判断 router.beforeEach((to, from, next) => {
 if (to.meta.title) {
 //タイトルがあるかどうかを判断します document.title = to.meta.title;
 }
 // console.log("タイトル",document.タイトル)
 // 現在のルートナビゲーションにログインが必要かどうかを判断するには、requiresAuth を使用します。if (to.matched.some(record => record.meta.requiresAuth)) {
 トークン = localStorage.getItem('トークン')
 // console.log("トークン",トークン)
 // ログインアクセスが必要な場合は、ユーザーがログインしているかどうかを確認します if (!token) {
  次({
  パス: '/login',
  クエリ: { リダイレクト: to.fullPath }
  })
 } それ以外 {
  次()
 }
 } それ以外 {
 next() // 必ず next() を呼び出してください
 }
})

デフォルトルーターをエクスポートします。

例:

各ルートごとにメタが追加されます。 requiresAuth フィールドは、ログインが必要かどうかを示すために使用されます。

router.beforeEach ではトークンのチェックが行われます。空の場合はログインページに移動します。

ホームページにアクセス

http://localhost:8080

ジャンプします

http://localhost:8080/login?redirect=%2F

効果は以下のとおりです。

F12を開いてコンソールに入り、トークンを手動で書き込みます

localStorage.setItem('トークン', '12345678910')

効果は以下のとおりです。

ホームページに再度アクセスすると、通常通りアクセスできるようになります。

アプリケーションを開き、ローカルストレージの値を削除し、右クリックしてクリアをクリックします。

ページを更新すると、ログイン ページにリダイレクトされます。

どうですか、簡単じゃないですか?

以上が、vue ルーティングでログインインターセプションを実装する方法の詳細です。vue ログインインターセプションの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • vue+axios フロントエンドでログインインターセプションを実装する 2 つの方法 (ルーティングインターセプション、http インターセプション)
  • vue-resource リクエストは、http ログインインターセプションまたはルーティングインターセプションメソッドを実装します。
  • Vueログインはログイン後に指定ページにジャンプし続ける操作をインターセプトします
  • Vueはログインインターセプションを実装する
  • vue+axios でログインインターセプションを実装するためのサンプルコード

<<:  MySQL での置換例の詳細な説明

>>:  Linux カーネル デバイス ドライバー Linux カーネル 基本メモの概要

推薦する

MySQL にテキストと画像を保存する方法

Oracle の大きなテキスト データ型 Clob 長いテキスト型 (MySQL ではサポートされて...

CSS スティッキーフッターのいくつかの実装

「スティッキーフッター」とはいわゆる「スティッキー フッター」は、新しいフロントエンドの概念や技術で...

MySQL と接続関連のタイムアウトの詳細な概要

MySQL と接続関連のタイムアウト序文:今日、同僚から、データ量が多いときに MySQL データベ...

コンパイル、インストールから設定ファイルの説明まで、中国語でnginxの詳細な説明

この記事では、コンパイルとインストールから設定ファイルの説明まで、Nginx について詳しく紹介しま...

MySQLインデックスとは何ですか?わからない場合は聞いてください

目次概要二分木からB+木へクラスター化インデックス非クラスター化インデックスジョイントインデックスと...

JavaScript データ プロキシとイベントの詳細な分析

目次データブローカーとイベントObject.defineProperty メソッドのレビューデータブ...

CSS3はリストの無限スクロール/カルーセル効果を実現します

効果プレビューアイデア現在のリストを最後の項目までスクロールし、すぐに最初の項目に戻ります。問題1....

nginx は画像表示の遅さとダウンロードの不完全さの問題を解決します

前面に書かれた最近、ある読者から、ブラウザからサーバーにアクセスすると、画像の表示が遅く、ブラウザに...

HTML テーブルの空白セル補完を実装する方法

私が初めて Web 開発を独学で学んだ頃は、いわゆる DIV/CSS レイアウトはなく、テーブル レ...

Centos7 での Rsync+crontab 定期同期バックアップ

最近、社内の重要なサーバデータを定期的にストレージにバックアップし、ついでにメモしておきたい以前、W...

InnoDB エンジンのパフォーマンスを最適化するための my.cnf パラメータ構成

私はインターネット上で数え切れないほどの my.cnf 構成を読みましたが、言及されている構成のほと...

JS でオブジェクト プロパティを簡単にトラバースするいくつかの方法

目次1. 自己列挙可能なプロパティ2. Object.values()はプロパティ値を返します3. ...

HTML ハイパーリンク内の中国語文字化けの分析と解決

Vm 内のハイパーリンク URL は、Get 要求のパラメータとして中国語と連結する必要があります。...

iframe が HTML 内のページにジャンプするのを防ぎ、iframe を使用して WeChat Web バージョンをページに埋め込む方法

私は、WinForm と HTML5 を組み合わせた小さなものを作りたいだけなのですが、突然、そこに...

CSS 属性を使用してマウス イベントをブロックする方法 (マウス クリックは上位の要素を貫通する可能性があります)

由来: 数日前、テスターから写真を見るという要件が送られてきました。 この要件を見たとき、私は少し混...