我有一个AngularJS应用程序与Laraval PHP后端进行通信。如果用户未登录,则发送GET请求至/api/checkLogin
将返回{ logged: false, username: undefined, id: undefined }
,否则,将返回类似{ logged: true, username: 'John', id: 123 }
的内容。创建一个AuthService来检查用户是否登录
我对使用AngularJS服务不太熟悉,但我想建立一个名为AuthService
的服务,它可以执行我的应用程序的身份验证服务。
我想实现以下功能:AuthService.loggedIn
,AuthService.isAdmin
,AuthService.username
和AuthService.id
。
我希望这些函数以这样一种方式实现,即调用一个函数将为所有其余的值设置值。例如,假设我打电话给AuthService.isAdmin
。该功能将检查是否设置了isAdmin
,如果是,则返回值为isAdmin
。如果未设置isAdmin
,则会向/api/checkLogin
发出HTTP请求,将值设置为loggedIn
,isAdmin
,username
和id
,然后返回值isAdmin
。我怎样才能做到这一点?
这里是我试过的服务放在一起:
angular.module('myApp').factory('AuthService', ['$http', function($http) {
var loggedIn;
var isAdmin;
var username;
var id;
var checkLogin = function() {
if(loggedIn != undefined) {
return loggedIn
} else {
setUserData(checkLogin);
}
}
var checkAdmin = function() {
if(isAdmin != undefined) {
return isAdmin
} else {
setUserData(checkLogin);
}
}
var returnUsername = function() {
if(username != undefined) {
return username
} else {
setUserData(checkLogin);
}
}
var returnId = function() {
if(id != undefined) {
return id
} else {
setUserData(checkLogin);
}
}
// Our function call which will set our loggedIn, isAdmin, username, and id values
var setUserData = function(callback) {
$http.get(baseURL+'/api/checkLogin').success(function(data) {
loggedIn = data.logged;
if(loggedIn) {
isAdmin = data.is_admin;
username = data.username;
id = data.id;
}
callback();
});
}
return {
loggedIn: function() { return checkLogin(); },
isAdmin: function() { return checkAdmin(); },
username: function() { return returnUsername(); },
id: function() { return returnId(); },
}
}]);
我已经更新了我的代码,现在'AuthService.loggedIn()'只返回'undefined',即使它应该只返回TRUE;或'FALSE' 。如何通过'$ http.get'调用捕获任何错误并返回(如果有错误)?除非请求中有错误,否则对'api/checkLogin'的调用将始终返回值为true或false的值)。 – chipit24 2014-10-10 17:27:49
在Javascript中,如果您没有指定返回值,该函数将返回undefined。在你的checkLogin方法中,else块中没有返回。这就是为什么你看到未定义。要在$ http调用中发现错误,只需添加一个错误回调:https://docs.angularjs.org/api/ng/service/$http – sma 2014-10-10 17:29:36
好吧,我明白了。我怎样才能确保'checkLogin'函数等待'setUserData'完成,然后返回'setUserData'设置'loggedIn'的任何值到? – chipit24 2014-10-10 17:43:31