gpt4 book ai didi

javascript - 如何保持全局当前用户直到使用 angular_devise 注销?

转载 作者:行者123 更新时间:2023-12-03 12:48:33 25 4
gpt4 key购买 nike

如何创建自己的全局可访问的服务,该服务将通过 currentUser() 调用服务器仅在页面加载一次时,如果用户已登录,则保留它并向 Controller 或状态提供数据直到注销?
现在我在许多州或 Controller 中解决了很多次currentUser() ,我在文档中找到: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");
});
}
]);

我发现类似的问题没有答案: stackoverflow

最佳答案

我们知道工厂是一个单例对象,基本上它用于数据共享。我们可以将它注入(inject)任何 Controller 并作为依赖项运行
.所以这也可以解决你的问题。将此服务注入(inject)您的状态解析 block 并检查用户是否存在,如果不存在则调用工厂的获取用户功能

app.factory("User", function($http, $q, $rootScope) {
var user = null;
return {
fetchUser: function() {
/*your ajax call that return current user*/
user = YOUR_SERVER_RESPONSE;
return user;

},
getUser : function(){
return user;
},
setUser : function(u){
user = u;
}
}

});

你的状态配置 block 看起来像
  .state('dashboard', {
url: '/dashboard',
templateUrl: 'dashboard.html',
resolve : function(User){
if(User.getUser()){
return User.getUser();
}else{
return User.fetchUser();
}
}
})

关于javascript - 如何保持全局当前用户直到使用 angular_devise 注销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29423383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com