我在离子移动应用程序中使用角度 ui-router , angular-cookies 进行身份验证。 这是我的州
.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('login', {
url: '/login',
templateUrl: 'templates/login.html',
controller: 'LogInCtrl'
})
.state('app', {
url: '/app',
abstract: true,
templateUrl: 'templates/menu.html',
controller: 'AppCtrl'
})
.state('app.search', {
url: '/search',
views: {
'menuContent': {
templateUrl: 'templates/search.html'
}
}
})
.state('app.browse', {
url: '/browse',
views: {
'menuContent': {
templateUrl: 'templates/browse.html'
}
}
})
.state('app.playlists', {
url: '/playlists',
views: {
'menuContent': {
templateUrl: 'templates/playlists.html',
controller: 'PlaylistsCtrl'
}
}
})
.state('app.single', {
url: '/playlists/:playlistId',
views: {
'menuContent': {
templateUrl: 'templates/playlist.html',
controller: 'PlaylistCtrl'
}
}
});
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/login');
});
这是我的运行方法代码
$rootScope.globals = $cookieStore.get('globals') || {};
if ($rootScope.globals.currentUser) {
$http.defaults.headers.common['Authorization'] = 'Basic ' + $rootScope.globals.currentUser.authdata; // jshint ignore:line
}
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
// redirect to login page if not logged in
var shouldLogin = typeof $rootScope.globals.currentUser == 'undefined';
// NOT authenticated - wants any private stuff
if(shouldLogin || fromState.name === "") {
var token = $rootScope.globals.currentUser == undefined ? null : $rootScope.globals.currentUser;
if (token == null) {
if(toState.name === 'login')
return;
$state.go('login');
event.preventDefault();
} else {
if(toState.name === toState.name)
return;
//TODO: Check token
$state.go(toState.name);
event.preventDefault();
}
}
});
身份验证工作正常,但当我将我的网址更改为 http://localhost:8100/ 时,它会重定向到登录页面,但会显示转到播放列表页面。需要帮助我做错了。
答案 0 :(得分:0)
您的网页被重定向到基本网址,因为:
$urlRouterProvider.otherwise('/login');
没有为/
定义状态,因此路由器会遇到otherwise
条件并重定向到/login