検索
ホームページウェブフロントエンドCSSチュートリアルナビゲーションガードでVueルートを保護します

ナビゲーションガードでVueルートを保護します

Webアプリケーションのセキュリティ認証は非常に重要です。パーソナライズされたエクスペリエンスを有効にし、ユーザー固有のコンテンツ(ログインステータスなど)をロードし、許可を評価して許可されていないユーザーが個人情報にアクセスするのを防ぐために使用することもできます。

通常、アプリケーションは、特定のルートの下にコンテンツを配置し、リダイレクトルールを構築することにより、コンテンツを保護し、ユーザーにアクセス権に基づいてリソースにアクセスするように指示します。保護されたルートの背後にコンテンツを確実に配置するには、独立した静的ページを構築する必要があります。このようにして、リダイレクトルールはリダイレクトを正しく処理できます。

VUEなどの最新のフロントエンドフレームワークで構築されたシングルページアプリケーション(SPA)の場合、リダイレクトルールを使用してルーティングを保護することはできません。すべてのページは、ブラウザの視点からの単一のエントリファイルから来ているため、1つのページのみがあります:index.html。 SPAでは、ルーティングロジックは通常、ファイルをルーティングします。この記事は、主にここで認証を構成します。 Vueのナビゲーションガードに特に依存して、認証固有のルートを処理するために、ルートが完全に解析される前に選択されたルートにアクセスするのに役立ちます。それがどのように機能するかを掘り下げましょう。

ルーティングの基本

ナビゲーションガードは、ルーティングの解決方法に関する追加機能を提供するVueルーターの特定の機能です。それらは主にエラー状態を処理し、ワークフローを突然中断することなくシームレスにユーザーをガイドするために使用されます。

Vueルーターには、グローバルガード、ルーター限定ガード、コンポーネントガードの3つの主要なカテゴリがあります。名前が示すように、グローバルガードは、ナビゲーションをトリガーするとき(つまり、URLが変更されたとき)と呼ばれます。これは、関連するルートを呼び出すとき(つまり、URLが特定のルートと一致するとき)、ルートのコンポーネントの作成、更新、または破壊時にコンポーネントガードが呼び出されます。各カテゴリには、アプリケーションルーティングをより詳細に制御する他の方法があります。 Vueルーターの各ナビゲーションガードで利用可能なすべての方法の迅速な内訳を次に示します。

グローバルガード

  • beforeEach :任意のルートに入る前に操作(このスコープにアクセスできません)
  • beforeResolve :ナビゲーション確認前のアクションですが、コンポーネントガードの後(以前と同じ、この範囲にアクセスできます)
  • afterEach :ルーティングの解決後の操作(ナビゲーションに影響を与えることはできません)

ルート専用ガード

  • beforeEnter :特定のルートに入る前に操作(グローバルガードとは異なり、このガードはこれにアクセスできます)

コンポーネントガード

  • beforeRouteEnter :ナビゲーション確認前およびコンポーネント作成の前に実行されるアクション(これにアクセスできません)
  • beforeRouteUpdate :同じコンポーネントを使用して新しいルートを呼び出すと実行された操作
  • beforeRouteLeave :ルートを出る前に操作

ルーティングを保護します

それらを効果的に実装するには、特定のシナリオでいつ使用するかを知ることが役立ちます。たとえば、分析のためにページビューを追跡する場合は、ルートの後にトリガーされ、関連するコンポーネントが完全に解析されるため、グローバル後のガードを使用することをお勧めします。ルートの解析の前にデータをVuexストレージにプレフィングする場合は、前のルート専用ガードを使用してそうすることができます。

この例では、ユーザーアクセス権に基づいて特定のルートの保護を扱っているため、コンポーネントガード、つまり前のフックを使用します。このナビゲーションガードにより、解析が完了する前に正しいルートにアクセスできます。これは、ユーザーが渡す前にデータを取得するか、データがロードされているかどうかを確認できることを意味します。実装の仕組みの詳細を掘り下げる前に、既存のルーティングファイルに前のフックがどのように組み込まれているかを簡単に見てみましょう。以下は、保護されたルートを含むサンプルルーティングファイルです。以前のフックを次のように追加します。

 const router = new Vuerouter({
  ルート:[
    ...
    {
      パス:「/保護」、
      名前:「保護」、
      コンポーネント:import(/ * webpackchunkname: "Protected" */'./pretected.vue')、
      前の(へ、から、次へ){
        //ここにロジック}
    }
  ]
})

ルーティング構造

Beforyenterの構造は、Vueルーターで利用可能な他のナビゲーションガードと変わりません。次の3 toのパラメーターを受け入れます。アプリケーションが去る「現在/差し迫った過去」ルートfromnext 、ルートを正常に解決するために呼び出さなければならない関数。

一般に、Vueルーターを使用する場合、次は引数なしで呼び出されます。ただし、これは永続的な成功状態を想定しています。私たちの場合、不正なユーザーが保護されたリソースにアクセスできず、適切にリダイレクトできる代替パスがあることを確認したいと考えています。これを行うには、パラメーターを次に渡します。これを行うには、ルート名を使用してユーザーをナビゲートします。

次({
  名前:「ダッシュボード」
})

この例には、ユーザーの承認トークンを保存するVuexストアがあると仮定しましょう。ユーザーが権限を持っているかどうかを確認するには、このストアを確認し、適切にまたはルートを介して失敗します。

前の(へ、から、次へ){
  // vuexストレージを確認する//
  if(store.getters ["auth/haspermission"]){
    次()
  } それ以外 {
    次({
      名前:「ダッシュボード」//セキュアルートに戻る//
    });
  }
}

イベントが同期して発生し、VUEX操作が完了するまでルートが時期尚早にロードされないようにするために、ナビゲーションガードを変換してAsync/awaitを使用しましょう。

 async beforeder(to、from、next){
  試す {
    var haspermission = await store.dispatch( "auth/haspermission");
    if(haspermission){
      次()
    }
  } catch(e){
    次({
      名前:「ダッシュボード」//セキュアルートに戻る//
    })
  }
}

ソースを覚えておいてください

これまでのところ、当社のナビゲーションガードは、許可されていないユーザーを出身地(つまり、ダッシュボードページ)にリダイレクトすることにより、保護されたリソースにアクセスできないようにする目的を達成してきました。それでも、そのようなワークフローは破壊的です。リダイレクトは予想外であるため、ユーザーはそれがユーザーエラーであると考え、ルートに繰り返しアクセスしようとする場合があります。最終的にアプリケーションが破損していると考えます。この問題を解決するために、ユーザーがいつ、なぜリダイレクトされるのかをユーザーに知らせる方法を作成しましょう。

クエリパラメーターを次の関数に渡すことでこれを行うことができます。これにより、保護されたリソースパスをリダイレクトURLに添付できます。したがって、ユーザーにアプリにログインするように促したり、停止した場所を覚えていないように適切な権限を取得するように促したい場合は、そうすることができます。以下に示すように、以前の機能に渡されたルートオブジェクトを介して、保護されたリソースのパスにアクセスできます。

 async beforeder(to、from、next){
  試す {
    var haspermission = await store.dispatch( "auth/haspermission");
    if(haspermission){
      次()
    }
  } catch(e){
    次({
      名前:「ログイン」、//セキュアルートに戻る//
      クエリ:{redirectfrom:to.fullpath}
    })
  }
}

通知します

ユーザーが保護されたルートにアクセスできないワークフローを強化する次のステップは、メッセージを送信してエラーと問題の解決方法を通知することです(正しい許可をログインまたは取得することにより)。これを行うには、リダイレクトが発生したかどうかを確認するために、特にbeforerouteenterを使用してコンポーネントガードを使用できます。リダイレクトパスをクエリパラメーターとしてルーティングファイルに渡すため、ルーティングオブジェクトをチェックしてリダイレクトが発生したかどうかを確認できます。

 beforerouteenter(to、from、next){
  if(to.query.redirectfrom){
    //何かをする//
  }
}

先に述べたように、すべてのナビゲーションガードは、ルートを解決するために隣に電話しなければなりません。以前に見たように、次の関数の利点は、オブジェクトを渡すことができることです。わからないかもしれないことは、次の関数でVUEインスタンスにアクセスできるということです。おお!これがどのように見えるかです:

 next(()=> {
  console.log(this)//これはvueインスタンスです})

あなたは、前に使用するとき、あなたは技術的にこの範囲にアクセスしていないことに気づいたかもしれません。これは事実かもしれませんが、VMを機能に渡すことでVueインスタンスにアクセスできます。

 next(vm => {
  console.log(vm)//これはvueインスタンスです})

これは、追加の構成なしで関連するエラーメッセージを使用してデータプロパティを簡単に作成して適切に更新できるため、これは特に便利です。この方法を使用して、次のようなコンポーネントが取得されます。

<template><div>
    {{errormsg}}

    ...

  </div>
</template>

<script>
export default {
  name: "Error",
  data() {
    return {
      errorMsg: null
    }
  },
  beforeRouteEnter(to, from, next) {
    if (to.query.redirectFrom) {
      next(vm => {
        vm.errorMsg =
          "对不起,您没有访问请求路由的权限"
      })
    } else {
      next()
    }
  }
}
</script>

結論は

認証をアプリケーションに統合するプロセスは難しい場合があります。許可されていないユーザーがルートにアクセスしないようにする方法と、ユーザーのアクセス許可に基づいてワークフローを構築する方法を説明し、ユーザーを保護されたリソースにリダイレクトします。これまでのところ、私たちの仮定は、アプリケーションで認証を構成していることです。まだ構成しておらず、すぐに起動して実行したい場合は、認証をサービスとして使用することを強くお勧めします。 Netlifyの認証ウィジェットやAuth0のロックなど、一部のプロバイダーがあります。

以上がナビゲーションガードでVueルートを保護しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
カーソルの次のレベルCSSスタイリングカーソルの次のレベルCSSスタイリングApr 23, 2025 am 11:04 AM

CSSを備えたカスタムカーソルは素晴らしいですが、JavaScriptを使用して次のレベルに物事を引き出すことができます。 JavaScriptを使用して、カーソル状態間で移行し、カーソル内に動的テキストを配置し、複雑なアニメーションを適用し、フィルターを適用できます。

Worlds Collide:スタイルクエリを使用したキーフレーム衝突検出Worlds Collide:スタイルクエリを使用したキーフレーム衝突検出Apr 23, 2025 am 10:42 AM

2025年には、互いに互いに跳ね返る要素を伴うインタラクティブなCSSアニメーションは、CSSにPongを実装する必要はありませんが、CSSの柔軟性とパワーの増加はLee&#039;の疑いを補強します。

UI効果にCSSバックドロップフィルターを使用しますUI効果にCSSバックドロップフィルターを使用しますApr 23, 2025 am 10:20 AM

CSSバックドロップフィルタープロパティを使用してユーザーインターフェイスをスタイルするためのヒントとコツ。バックドロップフィルターを複数の要素間でレイヤー化する方法を学び、それらを他のCSSグラフィカル効果と統合して、精巧なデザインを作成します。

微笑んでいますか?微笑んでいますか?Apr 23, 2025 am 09:57 AM

まあ、SVG&#039;の組み込みのアニメーション機能は、計画どおりに非推奨されることはありませんでした。確かに、CSSとJavaScriptは負荷を運ぶことができる以上のものですが、以前のようにSmilが水中で死んでいないことを知っておくのは良いことです

「かわいい」は見る人の目にあります「かわいい」は見る人の目にありますApr 23, 2025 am 09:40 AM

イェーイ、テキストワラップのジャンプを見てみましょう:サファリテクノロジーのプレビューにかなり着陸してください!しかし、それがChromiumブラウザーでの仕組みとは異なることに注意してください。

CSS-Tricks XLIIIを記録しますCSS-Tricks XLIIIを記録しますApr 23, 2025 am 09:35 AM

このCSS-Tricksアップデートは、アルマナック、最近のポッドキャスト出演、新しいCSSカウンターガイド、および貴重なコンテンツを提供するいくつかの新しい著者の追加の大幅な進歩を強調しています。

Tailwind&#039;の@Apply機能は、響きよりも優れていますTailwind&#039;の@Apply機能は、響きよりも優れていますApr 23, 2025 am 09:23 AM

ほとんどの場合、人々はTailwind&#039;の@Apply機能を紹介します。このように展示されたとき、@Applyはまったく有望な音をしません。だからobvio

私はリリースがないように感じます:正気な展開への旅私はリリースがないように感じます:正気な展開への旅Apr 23, 2025 am 09:19 AM

馬鹿のように展開することは、展開に使用するツールと複雑さの報酬と複雑さの減少との間の不一致になります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。