检查用户是否存在并使用Firebase + Angular + Facebook存储他的数据

时间:2014-12-01 22:28:34

标签: javascript firebase angularfire

我有一个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);
    });
}

0 个答案:

没有答案