AngularJs - 创建公共页面并限制页面

时间:2016-12-07 12:11:56

标签: angularjs

我需要创建一些有限制的页面,我的代码工作正常,但是当我尝试访问具有ID的页面时,无效并自动将我重定向到登录。谁能告诉我为什么?

function run($rootScope, $http, $location,  $localStorage) {
    // keep user logged in after page refresh
    if ($localStorage.currentUser) {
        $http.defaults.headers.common.Authorization = 'Bearer ' + $localStorage.currentUser;
    }


    // redirect to login page if not logged in and trying to access a restricted page
    $rootScope.$on('$locationChangeStart', function (event, next, current, Auth) {
        var publicPages = ['/login','/','/job','/job/:jobId'];
        var restrictedPage = publicPages.indexOf($location.path()) === -1;
        if (restrictedPage && !$localStorage.currentUser) {
            $location.path('/login');
        } 
    });
}

我的配置

    .when("/job" , {
        templateUrl: "app/components/job/views/job.html",
        controller: "job"
    })
    .when("/job/:jobId" , {
        templateUrl: "app/components/job/views/jobdetail.html",
        controller: "job_detail"
    })  

2 个答案:

答案 0 :(得分:0)

我认为您对公共网页的验证是错误的。

路径/job/:jobId只是一条路线。 调用$location.path()会返回替换参数的当前路径,因此会返回/job/1数组中不存在的publicPages

我还建议使用ui router。它让您的生活更轻松,并且有很多教程如何使用它(例如Handling basic route authorization in AngularJS

答案 1 :(得分:0)

如果您使用的是ui.router,那么您可以按如下方式实施可扩展的解决方案。在此示例中,任何以app开头的状态都需要身份验证使用test@gmail.com登录应用程序作为密码为123的电子邮件.ui.router hooks可以解决问题!。

resources :questions, except: [:show] do
   get '/resource/:subject/:id', to: 'resource#show', as: "resource", param: [:name, :id]

https://plnkr.co/edit/ZCN2hB34mMEmBJulyaAJ?p=preview