Angularjs Yeoman Angular Fullstack-如何保护路由?

Angularjs Yeoman Angular Fullstack-如何保护路由?,angularjs,angular-fullstack,Angularjs,Angular Fullstack,我用生成器创建了一个新的路由“Rooms”,并在管理路由上对$stateProvider进行了建模 .state('admin', { url: '/admin', templateUrl: 'app/admin/admin.html', controller: 'AdminController', controllerAs: 'admin', authenticate: 'admin' }); Vs 但我的路线仍然显示没有身份验证 我想我错过了一些

我用生成器创建了一个新的路由“Rooms”,并在管理路由上对$stateProvider进行了建模

.state('admin', {
    url: '/admin',
    templateUrl: 'app/admin/admin.html',
    controller: 'AdminController',
    controllerAs: 'admin',
    authenticate: 'admin'
  });
Vs

但我的路线仍然显示没有身份验证

我想我错过了一些东西,使它安全,虽然我无法理解是什么

有人能帮忙吗


谢谢

检查您是否在app.js中定义并调用了拦截器服务factore,如下所示:

    .config(function ($stateProvider, $urlRouterProvider, $locationProvider, $httpProvider) {
    $urlRouterProvider
      .otherwise('/');

    $locationProvider.html5Mode(true);
    $httpProvider.interceptors.push('authInterceptor');
  })

  .factory('authInterceptor', function ($rootScope, $q, $cookieStore, $location) {
    return {
      // Add authorization token to headers
      request: function (config) {
        config.headers = config.headers || {};
        if ($cookieStore.get('token')) {
          config.headers.Authorization = 'Bearer ' + $cookieStore.get('token');
        }
        return config;
      },

      // Intercept 401s and redirect you to login
      responseError: function(response) {
        if(response.status === 401) {
          $location.path('/login');
          // remove any stale tokens
          $cookieStore.remove('token');
          return $q.reject(response);
        }
        else {
          return $q.reject(response);
        }
      }
    };
  })

  .run(function ($rootScope, $location, Auth) {
    // Redirect to login if route requires auth and you're not logged in
    $rootScope.$on('$stateChangeStart', function (event, next) {
      Auth.isLoggedInAsync(function(loggedIn) {
        if (next.authenticate && !loggedIn) {
          event.preventDefault();
          $location.path('/login');
        }
      });
    });
  });

您的控制器应类似于:

     angular.module('auth8App').controller('RoomsCtrl', function ($scope,Auth,$location) {

               //check if the user is logged-in
                Auth.isLoggedInAsync(function(loggedIn) {
                        if (!loggedIn) {    
                       //if the user is not logged  Redirect to login
                          event.preventDefault();
                          $location.path('/login');
                        }
                      });
                    $scope.message = 'Hello';
                });

检查您是否在应用程序中定义并调用了侦听器服务factore。jsnow检查您的服务器端点中是否调用了身份验证中间件嘿,谢谢您的回复。是的,我有一个AuthInterceptor…现在检查在您的服务器端点中是否调用了身份验证中间件看起来是这样的:
/**从“/components/errors”导入错误;从“路径”导入路径;module.exports=function(app){//在app.use('/api/things',require('/api/things');app.use('/api/users',require('/api/user');app.use('/auth',require('/auth'));app.route('/:url(api | auth | components | app | app | bower components | assets)/*')).get(错误[404]);app.route('/*).get(函数(req,res){res.sendFile(path.resolve(app.get('appPath')+'/index.html');};};
`use strict';这里没有什么内容:angular.module('auth8App').controller('RoomsCtrl',function($scope){$scope.message='Hello';})`
     angular.module('auth8App').controller('RoomsCtrl', function ($scope,Auth,$location) {

               //check if the user is logged-in
                Auth.isLoggedInAsync(function(loggedIn) {
                        if (!loggedIn) {    
                       //if the user is not logged  Redirect to login
                          event.preventDefault();
                          $location.path('/login');
                        }
                      });
                    $scope.message = 'Hello';
                });