Angularjs 在AngularFire中创建帐户后无法自动登录用户

Angularjs 在AngularFire中创建帐户后无法自动登录用户,angularjs,firebase,angularfire,firebasesimplelogin,Angularjs,Firebase,Angularfire,Firebasesimplelogin,您好,我正在使用AngularJS+Firebase和AngularFire,试图创建一个简单的类似tumblr的博客应用程序来学习AngularJS的细节。不使用任何有角度的种子或进行特定的教程,只是我需要学习的东西 我让$firebase简单登录系统正常工作。我创建了一个简单的用户注册表单,当用户提交时,我启动$createUser,它可以工作,然后我将用户输入的所有配置文件数据加载到数据集中,其中包含createUser承诺返回的user.id。API文档说他们的参数留空将在创建后自动让用

您好,我正在使用AngularJS+Firebase和AngularFire,试图创建一个简单的类似tumblr的博客应用程序来学习AngularJS的细节。不使用任何有角度的种子或进行特定的教程,只是我需要学习的东西

我让$firebase简单登录系统正常工作。我创建了一个简单的用户注册表单,当用户提交时,我启动$createUser,它可以工作,然后我将用户输入的所有配置文件数据加载到数据集中,其中包含createUser承诺返回的user.id。API文档说他们的参数留空将在创建后自动让用户登录,但是我在几个地方读到这是删除的,文档没有更新。此外,在常规Firebase API中,它提到用户必须在创建帐户后登录。我尝试在返回的帐户创建承诺中启动$login方法,如下所示:

$scope.signUp = function(newuser){
                var userData = newuser;
                var userRef = new Firebase(FB_URL+'users');
                $scope.users = $firebase(userRef); //oooohhhhhh
                $rootScope.loginObj.$createUser(newuser.email,newuser.password).then(function(user){
                    var child = $scope.users.$child(user.id);
                    child.$set({name:userData.fullname,email:userData.email});
                    $rootScope.loginObj.$login('password',userData.email,userData.password).then(function(user,error){
                        $location.path('/home');
                    },function(error){
                        console.log(error);
                    });
                    //$rootScope.loginObj.user = user;
                    //$rootScope.currentUser = user;
                    //$location.path('/home');
                    //$rootScope.loginObj.$login('password', userData.email, userData.password).then(function(user){
                    //  $location.path('/home');
                    //},function(error){
                    //  console.log(error);
                    //});
                },function(error){
                    console.log(error);
                });
            };
这让我犯了一个错误:

        Error {code: "UNKNOWN_ERROR", data: Object, stack: "Error: FirebaseSimpleLogin: FirebaseSimpleLogin: A…ple-login/1.5.0/firebase-simple-login.js:188:231)", message: "FirebaseSimpleLogin: FirebaseSimpleLogin: An unknown error occurred."}
code: "UNKNOWN_ERROR"
data: Object
message: "FirebaseSimpleLogin: FirebaseSimpleLogin: An unknown error occurred."
stack: "Error: FirebaseSimpleLogin: FirebaseSimpleLogin: An unknown error occurred.↵    at Error (native)↵    at Object.fb.simplelogin.Errors.format (https://cdn.firebase.com/js/simple-login/1.5.0/firebase-simple-login.js:33:294)↵    at https://cdn.firebase.com/js/simple-login/1.5.0/firebase-simple-login.js:176:275↵    at fb.simplelogin.providers.Password_.login (https://cdn.firebase.com/js/simple-login/1.5.0/firebase-simple-login.js:90:196)↵    at https://cdn.firebase.com/js/simple-login/1.5.0/firebase-simple-login.js:176:209↵    at r (https://cdn.firebase.com/js/simple-login/1.5.0/firebase-simple-login.js:60:151)↵    at new n (https://cdn.firebase.com/js/simple-login/1.5.0/firebase-simple-login.js:60:79)↵    at fb.simplelogin.client.loginWithPassword (https://cdn.firebase.com/js/simple-login/1.5.0/firebase-simple-login.js:176:81)↵    at fb.simplelogin.client.login (https://cdn.firebase.com/js/simple-login/1.5.0/firebase-simple-login.js:173:85)↵    at Object.login (https://cdn.firebase.com/js/simple-login/1.5.0/firebase-simple-login.js:188:231)"
get stack: function () { [native code] }
set stack: function () { [native code] }
__proto__: d
我还尝试调用我在控制器中创建的方法,该方法类似于$scope.loginemail、password,但也不起作用。当用户注册时,它会将他们带到仅限于登录用户的主视图。如果用户未通过身份验证,则会将其返回到登录视图。因此,现在的情况是,用户创建他们的帐户,然后被路由到/home,他们没有显示为已验证,然后返回登录。 我的路由器配置:

app.config(['$routeProvider', '$locationProvider', 
    function($routeProvider, $locationProvider) {
  $routeProvider
   .when('/admin', {
    templateUrl: 'admin.html',
    controller: 'AdminController',
    needsAuth: true
  })
  .when('/home', {
    templateUrl: 'home.html',
    controller: 'HomeController',
    needsAuth: true
  })
  .when('/login', {
    templateUrl: 'app/html/login-form.html',
    controller: 'LogInController',
    needsAuth: false
  })
  .otherwise({redirectTo: '/home'});
}]); 
下面是一个逻辑,用于检查一旦启动routechange,用户是否已通过身份验证:

app.run(function ($rootScope, $firebaseSimpleLogin, $location) {
    $rootScope.$on('$routeChangeStart', function (event, next, $firebaseSimpleLogin, $scope, $rootScope) {
        //console.log(event.targetScope);

        console.log(event.targetScope.currentUser);
        event.targetScope.loginObj.$getCurrentUser().then(function(user){ 

            var userAuthenticated = null;
            if (user || event.targetScope.currentUser)
                var userAuthenticated =  true;

            //console.log(userAuthenticated);
            if(!userAuthenticated && next.needsAuth){
                $location.path('/login');
            }
        }, function(error){
            console.log(error);

        });
    });
我尝试通过创建一个名为currentUser的单独变量来绕过这个问题,并使用createUser函数返回的用户数据加载它,然后在将它们带到主视图时也检查它。它是有效的,但是如果用户刷新,他们就会丢失这些信息,因为它没有保存到会话中,我猜$login就是这么做的。

与createUser不同,它不是电子邮件地址和密码,而是一个对象;与核心FirebaseSimpleLogin方法相同的API

所以这个代码:

$rootScope.loginObj.$login('password',userData.email,userData.password).then(...)
应该更像这样:

var options = {email: userData.email, password: userData.password};
$rootScope.loginObj.$login('password', options).then(...)
有关更多详细信息和示例,请参见