【发布时间】:2016-03-11 07:02:58
【问题描述】:
我想限制用户访问 /dashboard 视图和 /add-item 视图或我的 Angular js 应用程序中的任何其他视图。
这是我的路由器
app.config(function($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('login');
$stateProvider.
state('app.dashboard', {
url: '/dashboard',
templateUrl: appHelper.viewsPath('dashboard/views/dashboard'),
controller: 'DashBoardController as DashBordCtrl',
}).
// Add Item
state('app.add-item', {
url: '/add-item',
templateUrl: appHelper.viewsPath('item/views/add-item'),
controller: 'ItemController as ItemCtrl',
})
});
登录后,我将令牌存储在本地存储中。如果令牌不存在,我希望用户不要访问任何视图。
这是我的登录控制器
$scope.register = function(credentials){
LoginService.post(credentials,function(success){
$state.go('app.add-item');
SessionService.set("token",success.accessToken);
},function(error){
FlashService.showError("Please Enter Valid Email Password");
});
}
}
在出现 401 错误时,我会重定向到这样的登录页面:
app.config(function ($httpProvider) {
// $http.defaults.headers.common.Authorization = '';
delete $httpProvider.defaults.headers.common['X-Requested-With'];
$httpProvider.interceptors.push(function ($location, $q, SessionService, FlashService) {
return {
request: function (config) {
config.headers = config.headers || {};
config.headers.Authorization = SessionService.get('token');
return config;
},
responseError: function (response) {
if (response.status === 401) {
SessionService.unset('token');
$location.path('/login');
}
return $q.reject(response);
}
};
});
});
但是如果我在 url 中输入 /add-item,我的 add-item 页面正在打开,然后突然关闭,因为服务器返回 401,并出现登录页面。如果用户不是,我不想打开任何视图登录。
我是 angularjs 的新手,我很困惑如何做到这一点。请帮忙。
【问题讨论】:
标签: javascript angularjs