如何创建自己的全局可访问的服务,该服务将通过以下方式调用服务器currentUser()
仅在页面加载时一次,如果用户已登录,则保留它并向控制器或状态提供数据,直到注销?
现在我在许多状态或控制器中多次解析currentUser()
,我在文档中找到:验证解析响应 https://github.com/cloudspace/angular_devise#authparseresponse可以提供自己的服务,但我不知道如何以正确的方式处理这个问题。
例如,在 ui-router 中,我有两个服务器调用,仅在加载页面时就足够了:
.state('login', {
url: '/login',
templateUrl: 'auth/_login.html',
controller: 'AuthCtrl',
onEnter: [
'$state', 'Auth',
function($state, Auth) {
Auth.currentUser().then(function() {
$state.go('home');
});
}
]
})
.state('dashboard', {
url: '/dashboard',
templateUrl: 'dashboard.html',
onEnter: [
'$state', 'Auth',
function($state, Auth) {
Auth.currentUser().then(function(user) {}, function(err) {
$state.go('home');// user not logged in
});
}
]
})
或者每次下一个服务器在 NavController 中调用时:
app.controller('NavController', [
'$state', '$scope', 'Auth', function($state, $scope, Auth) {
$scope.signedIn = Auth.isAuthenticated;
$scope.logout = Auth.logout; // logout function
Auth.currentUser().then(function(user) {
$scope.user = user;
});
$scope.$on('devise:login', function(e, user) {
$scope.user = user;
});
$scope.$on('devise:logout', function(e, user) {
$scope.user = {};
$state.go("home");
});
}
]);
我发现类似的问题没有答案:堆栈溢出 https://stackoverflow.com/questions/29074185/how-to-globally-implement-authentication-with-angularjs-devise-and-ui-router