AngularJS UI路由器未在未经授权的解析呼叫上路由
我有一个仪表板应用程序用户需要登录。如果您进入登录页面,然后登录并进入仪表板,则一切正常。我的问题是,当有人试图在登录前点击仪表板视图时。它识别出解析调用是未经授权的,但它从不转换到登录页面AngularJS UI路由器未在未经授权的解析呼叫上路由,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我有一个仪表板应用程序用户需要登录。如果您进入登录页面,然后登录并进入仪表板,则一切正常。我的问题是,当有人试图在登录前点击仪表板视图时。它识别出解析调用是未经授权的,但它从不转换到登录页面 $stateProvider .state('login', { url: '/login', templateUrl: 'login/login.html', controller: 'LoginCtrl',
$stateProvider
.state('login', {
url: '/login',
templateUrl: 'login/login.html',
controller: 'LoginCtrl',
authenticate: false
})
.state('dashboard', {
url: '/dashboard',
views: {
'': {
templateUrl: 'dashboard/dashboard.html',
controller: 'DashboardCtrl'
},
'current-status-module@dashboard': {
templateUrl: 'current-status/current-status.html'
},
'alerts-module@dashboard': {
templateUrl: 'alerts/alerts.html',
controller: 'AlertCardsCtrl',
resolve: {
ZonesService: 'ZonesService',
userZones: function (LoginService, ZonesService, $stateParams) {
return ZonesService.query({zoneId: $stateParams.zoneId}).then(function(data){
return data;
});
}
}
},
'alert-cards-module@dashboard': {
templateUrl: 'alerts/alert-cards/alert-cards.html'
},
'zones-module@dashboard': {
templateUrl: 'zones/zones.html'
},
'map-grid-module@dashboard': {
templateUrl: 'zones/zone-map/zone-map.html'
}
},
authenticate: true
})
.factory('LoginService', function ($window, $http, $q, $state, ENV) {
return {
login: function (username, password) {
var deferred = $q.defer();
$http.post(ENV.web_api_url + ENV.api_version + '/login', {}, {
"headers": {
"X-Auth-Username": username,
"X-Auth-Password": password
}
}).success(function (data) {
$window.sessionStorage.token = data.token;
deferred.resolve(data);
$state.transitionTo("dashboard");
}).error(function (error) {
deferred.reject(error);
});
return deferred.promise;
},
isAuthenticated: function () {
//==TODO: Call endpoint to check auth token
return true;
},
isRestricted: function () {
return ENV.is_restricted;
},
logout: function (error) {
// User isn’t authenticated
$window.sessionStorage.notification = "Authenticated session has expired. Please log in again.";
$window.sessionStorage.notifyAlert = 'show';
$window.location = ENV.location_path_home;
}
}
});
.run(function ($window, $rootScope, $state, LoginService) {
$rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) {
$rootScope.user = angular.fromJson($window.sessionStorage.user);
$rootScope.loggedIn = $window.sessionStorage.loggedIn;
if (toState.authenticate && !LoginService.isAuthenticated()) {
// User isn’t authenticated
$state.transitionTo("login");
event.preventDefault();
}
if (toState.restricted && LoginService.isRestricted()) {
console.log("restricted...")
// Action is restricted to user
$rootScope.selectedIndex = 0;
event.preventDefault();
}
});
});
此条件不会为真:(toState.authenticate&!LoginService.isAuthenticated())
因为在LoginService.isAuthenticated()中总是返回true。因此,$state.transitiono(“login”)永远不会执行。此条件不会为真:(toState.authenticate&&!LoginService.isAuthenticated()) 因为在LoginService.isAuthenticated()中总是返回true。因此,$state.transitiono(“login”)永远不会被执行