我有一个Facebook注册方法,我希望它检查用户是否已经存在我的Firebase中。如果是,我想将此数据设置为$ rootScope.loggedInUser以跨控制器共享。
这是这个想法的实现。 问题是 - 没有数据写入firebase,也没有执行重定向。 似乎我错过了一些明显的东西。有什么想法吗?
Firebase v2.0.4
AngularFire 0.9.0
Angular 1.2.20
$scope.loginFacebook = function() {
$scope.auth.$authWithOAuthPopup("facebook")
.then(function(authData) {
var userId = authData.uid
function checkIfUserExists(userId) {
(new Firebase(USERS)).child(authData.uid).once('value', function(snapshot) {
var exists = (snapshot.val() !== null);
userExistsCallback(userId, exists);
});
}
function userExistsCallback(exists) {
if (exists) {
var loggedInUser = $firebase(new Firebase(USERS).child(authData.uid)).$asObject();
loggedInUser.$loaded().then(function() {
$rootScope.loggedInUser = loggedInUser;
$window.location.href = '#/profile';
});
} else {
$firebase(new Firebase(USERS).child(authData.uid))
.$update({
"uid": authData.uid,
"email": authData.facebook.email,
"displayName": authData.facebook.displayName,
"image": authData.facebook.cachedUserProfile.picture.data.url
})
.then(function(authData) {
$rootScope.loggedInUser = {
'uid': authData.uid,
'email': authData.facebook.email,
'displayName': authData.facebook.displayName,
'image': authData.facebook.cachedUserProfile.picture.data.url
}
var loggedInUser = $firebase(new Firebase(USERS).child(authData.uid))
$rootScope.loggedInUser = loggedInUser.$asObject();
$window.location.href = '#/profile';
});
}
}
}).catch(function(error) {
console.error("Authentication failed:", error);
});
}