我需要创建一些有限制的页面,我的代码工作正常,但是当我尝试访问具有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"
})
答案 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]