我有一個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