2014-10-30 17 views
0

我使用的是firebaseSimpleLogin的Firebase的AngularJS。它工作了一阵子,突然它不起作用。登录部分工作正常,但新用户无法注册。

var userAuthRef = new Firebase(URL+"/userAuth"); 
$scope.loginObj = $firebaseSimpleLogin(userAuthRef); 

$scope.userSignup = function(){ 
     $('.signup.small.modal').modal('hide'); 
     if ($scope.Password!="" && angular.equals($scope.PasswordFirst, $scope.PasswordConfirm)){ 
      console.log($scope.Email + $scope.PasswordConfirm); ////the first log 
      $scope.loginObj.$createUser($scope.Email,$scope.PasswordConfirm) 
      .then(function(auth) { 
       console.log("reached here"); ////the second log 
       if (auth === null) { 
        console.log("Error creating user:", error); 
       } else { 
        console.log("User created successfully"); 
        $scope.loginObj.$login("password", { 
         email: $scope.Email, 
         password: $scope.PasswordConfirm 
        }).then(function(user) { 
         console.log("Logged in as: ", user.uid); 
         userRef = $firebase(new Firebase(someURL+user.uid)); 
         userRef.$set({username: $scope.Username, time: Date(), reported: 0}); 
         $scope.user = userRef.$asObject(); 
        }, function(error) { 
         console.error("Login failed: ", error); 
        }); 
       } 
      }), function(error){ 
       console.error("signup failed: ", error); 
       ////Sign up failure log 
      }; 
     } 
     else{ 
      console.log("condition does not satisfy"); 
     } 
    }; 

我很确定函数userSignup()被调用,因为第一个console.log确实打印出了一些东西。然后我甚至不知道$ createUser是否执行,因为控制台不再提供任何东西。

这些都在火力地堡锻造的规则:

{ 
    "rules": { 
    ".read": true, 
    "$user": { 
     ".write": true 
    } 
    } 
} 

为$的createUser的错误使用?

+0

您是否升级了Firebase?修改您的安全规则?如果你不改变代码中的某些东西,显然函数不会奇迹般地停止工作。 – Kato 2014-11-02 17:56:20

+0

你的语法错误;错误回调实际上并不在.then()调用中。一个好的IDE会在这里给你一个警告。将'''移到你的错误回调后,你会收到一些新的数据。 – Kato 2014-11-02 18:01:51

回答

1

我认为出现这个问题是因为FirebaseSimpleLogin现在是标准的firebase库的一部分。看到这里,它已被弃用:https://www.firebase.com/docs/web/api/firebasesimplelogin/

从现在开始使用API​​如下所述: https://www.firebase.com/docs/web/api/firebase/createUser.html

如果仍要有关认证数据对象,请使用.getAuth(): https://www.firebase.com/docs/web/api/firebase/getAuth.html

请尝试以下代码:

var userAuthRef = new Firebase(URL); 
$scope.userSignup = function() { 
    if ($scope.Password != "" && angular.equals($scope.PasswordFirst, $scope.PasswordConfirm)) { 
     $('.signup.small.modal').modal('hide'); 
     console.log($scope.Email + $scope.PasswordConfirm); ////the first log 
     firebaseRef.createUser({ 
      email: $scope.Email, 
      password: $scope.PasswordConfirm 
     }, function(err) { 
      console.log("reached here"); ////the second log 
      if (err) { 
       switch (err.code) { 
        case 'EMAIL_TAKEN': 
         console.log("Error creating user, email taken:", error); 
        case 'INVALID_EMAIL': 
         console.log("Error creating user, invalid email:", error); 
        case 
        default: 
         console.log("Error creating user:", error); 
       } 
      } else { 
       // User account created successfully! 
       console.log("User created successfully"); 
       dataRef.authWithPassword({ 
        "email": $scope.Email, 
        "password": $scope.PasswordConfirm 
       }, function(error, authData) { 
        if (error) { 
         console.log('Login Failed!', error); 
        } else { 
         console.log('Authenticated successfully with payload:', authData); 
         console.log("Logged in as: ", authData.uid); 
         var userRef = $firebase(new Firebase(someURL + authData.uid)); 
         userRef.$set({ 
          username: $scope.Username, 
          time: Date(), 
          reported: 0 
         }); 
         $scope.user = userRef.$asObject(); 
        } 
       }); 
      } 
     }); 
    } 
} 
+0

海报正在使用AngularFire,目前它仍然可以与SimpleLogin一起使用。 https://www.firebase.com/docs/web/libraries/angular/guide.html#section-angular-authentication – 2014-10-31 05:29:23

+0

只有当用户升级其Firebase.js SDK版本时,此答案才会成立。 – Kato 2014-11-02 17:57:58