6

ユーザーがルートにアクセスできるかどうかの基本的な検証を作成しようとしています。私はそれで進歩しましたが、理解できないことが1つあります。

$locationChangeStart を使用して、ルートの変更を監視しています。シナリオは次のとおりです。 1. ユーザーがログインしている場合、認証ルート (ログイン、登録) を除くすべてのルートへのアクセスを許可します。AuthFactory 2 からメソッド isAuthenticated() を呼び出してこれを確認しています。ユーザーがログインしていない場合、ユーザーはログインのみにアクセスしてルートを登録します。他のルートは防止する必要があり、その場合はユーザーをログインにリダイレクトする必要があります。

$rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl){
  if(AuthFactory.isAuthenticated()){
    if(AuthFactory.isAuthRoute(newUrl)){
      event.preventDefault();
      $location.path('/');
    }
  } else {
    if(!AuthFactory.isAuthRoute(newUrl)){
      event.preventDefault();
      $location.path('/login');
    }

  }
});

私を悩ませているのは、preventDefault() のものです。アプリが preventDefault() を使用してコードに到達した場合、location.path()それはその後に続き、単に機能しません。

ただし、を削除するevent.preventDefault()と、location.path()機能します。これに関する問題は、ログに記録されていない人が認証されていないページにアクセスしようとした場合に備えて、防止する必要があることです。

基本的に、リクエストされたルートに基づいて防止またはリダイレクトできるようにしたいと考えています。それを行う適切な方法は何ですか?

4

4 に答える 4

4

わかりました、これを行う必要があります:

var authPreventer = $rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl){
    if(AuthFactory.isAuthenticated()){
        if(AuthFactory.isAuthRoute(newUrl)){
            event.preventDefault();
            authPreventer(); //Stop listening for location changes
            $location.path('/');
        }
    } 
    else {
        if(!AuthFactory.isAuthRoute(newUrl)){
            event.preventDefault();
            authPreventer(); //Stop listening for location changes
            $location.path('/login');
        }
    }
});
于 2014-03-30T10:43:46.143 に答える