以角度验证路线

时间:2014-12-02 01:04:43

标签: angularjs angular-ui-router

我需要某些路由来要求身份验证,我正在使用此模块:

https://github.com/enginous/angular-oauth

哪个有$ scope.authenticate,但我试图找出如何从$ routeProvider访问$ scope / that函数。我看到一个例子叫做工厂功能,但这并不是我想做的事情。

'use strict';

angular.module('app', [
  'ngRoute',
  'angularOauth',
  'googleOauth',
  'app.global',
  'app.home',
  'app.view'
]).
config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/', {
    templateUrl: 'views/home/index.html',
    controller: 'home'
  });
  $routeProvider.when('/view', {
    templateUrl: 'views/view/index.html',
    controller: 'view',
    resolve: {
      factory: checkAuth
    }
  }).otherwise({redirectTo: '/'});
  $routeProvider.otherwise({redirectTo: '/'});
}]);

var checkAuth = function() {
};

1 个答案:

答案 0 :(得分:0)

resolve的注释与Angular中其他任何位置使用的依赖注入注释相同。您的身份验证逻辑应该存在于可测试性和可重用性的服务中,因此在您的服务上注入和调用方法正是您应该做的:

resolve: {
  auth: ['AuthenticationService', function (AuthenticationService) {
    // Authentication service injected, call your method
    return AuthenticationService.isAuthenticated();
  }]
}

var checkAuth = ['AuthenticationService', function (AuthenticationService) {
  // Authentication service injected, call your method
  return AuthenticationService.isAuthenticated();
}];

angular.module('app', [
  // ...
]).
config(['$routeProvider', function($routeProvider) {
  // ...
  $routeProvider.when('/view', {
    templateUrl: 'views/view/index.html',
    controller: 'view',
    resolve: {
      auth: checkAuth
    }
  })
  // ...
}]);