在我的应用程序中,我维护URL以分隔客户,如
myapp.localhost.com /#/ customer1表 myapp.localhost.com /#/的customer2
现在说customer1已登录。然后在同一浏览器中,但在其他标签中,customer2正在输入他的网址。在这一点上,我想避免customer2登录,当他点击url时,我想再次登录customer1 url。
我使用了以下代码。
.factory('authService', function ($rootScope, $state, $auth, $location, $stateParams) {
return {
isLoggedin: function () {
console.log($auth.isAuthenticated());
if (!$auth.isAuthenticated()) {
if($rootScope.currentUser.accessLevel == '1')
{
$rootScope.currentUser = null;
$location.path('/admin');
}
else
{
$rootScope.currentUser = null;
//$state.go('customer',{'customerTag' : localStorage.getItem('customerTag')});
$location.path("/"+localStorage.getItem('customerTag'));
}
return true;
}
}
};
})
.run(function($rootScope, $state, $stateParams, $location, $auth) {
$rootScope.$state = $state;
$rootScope.$on('$stateChangeStart', function(event, toState) {
});
});
请建议解决方案
答案 0 :(得分:1)
您可以在路由器配置中添加“解析”密钥,确保将已登录的用户重定向到管理面板或任何其他位置。像这样:
$stateProvider.state('login', {
url: '/login',
templateUrl: '/templates/login.html',
controller: 'LoginController',
resolve: {
canLogin : ['$q', 'authService', function ($q, authService) {
var deferred = $q.defer();
if (authService.isLoggedin()) {
// redirect user to admin panel or any other place
$location.path('/admin');
// location.path("/"+localStorage.getItem('customerTag'))
deferred.reject();
}
else {
deferred.resolve();
}
return deferred.promise;
}]
}
})
提示:避免在isLoggedin等方法中更改存储空间。 Probaly可以根据此方法的返回更新存储。