beforeEach を使用するとブラウザが応答しなくなる
P粉724256860
P粉724256860 2024-03-19 22:53:00
0
1
355

ユーザーがアクセスできるルートとアクセスできないルートをアプリケーションに設定しようとしていますが、時々ブラウザがフリーズしてエラー メッセージが表示されないため、何が間違っているのかわかりません。

最初の IF では、ルートがアクセスに true の認証を必要とするかどうかを確認し、false の場合は、ユーザーをログイン ページに送信します。次に、ユーザーがどのグループに属しているかを確認し、それが失敗した場合はルート ページ「/」にリダイレクトします。これらの IF ステートメントがどれも当てはまらない場合は、ユーザーが移動したいページにリダイレクトするだけです。

router.beforeEach((to、from、next) => {

      const isAuth = localStorage.getItem("auth");
      const userGroupRaw = localStorage.getItem("userData");
      const accessGroup = to.meta.group;
      ユーザーグループを許可します。
      if (userGroupRaw) {
        userGroup = JSON.parse(userGroupRaw).id_access;
      }
    
      if (to.matched.some((record) =>record.meta.requiresAuth)) {
        console.log("if1");
        if (isAuth === "false") {
          next({ パス: "/login" });
        }
        もし (
          (アクセスグループ === 1 && (ユーザーグループ === 3 || ユーザーグループ === 4)) ||
          !ユーザー・グループ
        ) {
          next({ パス: "/" });
        }
    
        次();
      }
    
      次();
    });
    デフォルトルーターをエクスポート;

P粉724256860
P粉724256860

全員に返信(1)
P粉409742142

"else" ステートメントを使用していないため、next() を複数回呼び出し、無限ループにはまってしまいます (コメントで述べたように)。

return を使用すると、この時点でコードを停止できます。

router.beforeEach((to、from、next) => {

  const isAuth = localStorage.getItem("auth");
  const userGroupRaw = localStorage.getItem("userData");
  const accessGroup = to.meta.group;
  ユーザーグループを許可します。
  if (userGroupRaw) {
    userGroup = JSON.parse(userGroupRaw).id_access;
  }

  if (to.matched.some((record) => Record.meta.requiresAuth)) {
    if (isAuth === "false") {
        次へ戻る({
            パス:「/ログイン」
        });
    }
    もし (
        (アクセスグループ === 1 && (ユーザーグループ === 3 || ユーザーグループ === 4)) ||
        !ユーザー・グループ
    ) {
        次へ戻る({
            パス: "/"
        });
    }
    // next(); - 先行する next が常に呼び出されるため、これは必要ありません。
  }
  次();
})

デフォルトルーターをエクスポート;
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート