2017-01-03 4 views
0

これは本当に簡単だと思うが、どうして私がそれを理解できないのか分からない。今、私はそのよう'/login'ルートに決意を追加したい場合はユーザーがAngularFireでログインしている場合、Angularページへのアクセスを防止するにはどうすればよいですか?

// == LISTEN FOR ROUTE ERRORS 
app.run(['$rootScope', '$location', function($rootScope, $location) { 
    $rootScope.$on('$routeChangeError', function(event, next, previous, error) { 
     if (error === 'AUTH_REQUIRED') { 
      $location.path('/login'); 
     } 
    }); 
}]); 

// == RETURN AUTH SERVICE 
app.factory('Authentication', ['$firebaseAuth', function($firebaseAuth) { 
    return $firebaseAuth(); 
}]); 

// == APP ROUTER 
app.config(['$routeProvider', '$location', function($routeProvider, $location) { 
    $routeProvider 
     .when('/account', { 
      controller: 'userController', 
      templateUrl: 'views/account.html', 
      resolve: { 
       "currentAuth": ['Authentication', function(Authentication) { 
        return Authentication.$requireSignIn(); // if rejected throws $routeChangeError 
       }] 
      } 
     }) 
}]); 

:私たちは、ユーザーが我々にはログインしていない場合は、ページへのアクセスを制限したい場合は例えば

のような何かを行うことができますユーザーがログインしている場合、アカウントページまたは成功ページにそれらを強制することはできますか?

.when('/login', { 
    controller: 'userController', 
    templateUrl: 'views/login.html', 
    resolve: { 
     "currentAuth": [function() { 
      // reject if the user is already logged in 
     }] 
    } 
}); 

答えて

1
.when('/login', { 
    controller: 'userController', 
    templateUrl: 'views/login.html', 
    resolve: { 
     "currentAuth": ['$q', function($q) { 
      var p = $q.defer(); 
      if (Authentication.$getAuth()) { 
       p.reject({code: someErrorCode, message: 'Already logged in'}); 
      } else { 
       p.resolve(); 
      } 
      return p.promise; 
     }] 
    } 
}); 

これは私がログアウトしていた場合でも、それはもう全くの私のログインページをロードしない作っているいくつかの理由で$routeChangeErrorまたは$stateChangeError

+0

で、ログインしたときにも、シナリオを処理する必要があります。どんな考え? –

+0

$ requoreSignInを使用していない可能性があります。$ getAuth()を使用して回答を更新します。 –

+0

$ getAuth()は関数ではないというエラーを記録できました。私は認証ファクトリも含めました。 '' '' $ q '' '認証' '関数($ q、認証){} ' –

関連する問題