Javascript Firebase多次登录用户

Javascript Firebase多次登录用户,javascript,angularjs,firebase,angularfire,firebasesimplelogin,Javascript,Angularjs,Firebase,Angularfire,Firebasesimplelogin,每次我点击登录按钮时都会发生这种情况 第一次登录:回调显示2次登录 首次注销 第二次登录:回调显示4次登录 第二次注销 第三次登录:callback现在第行显示5次登录 等等 这是我的登录功能: $scope.userLogin = function(user){ $scope.userLoginEmail = user.email; $scope.userLoginPassword = user.password; $scope.authUse

每次我点击登录按钮时都会发生这种情况

第一次登录:回调显示2次登录

首次注销

第二次登录:回调显示4次登录

第二次注销

第三次登录:callback现在第行显示5次登录

等等

这是我的登录功能:

$scope.userLogin = function(user){
        $scope.userLoginEmail = user.email;
        $scope.userLoginPassword = user.password;

        $scope.authUser().login('password', {
            email: $scope.userLoginEmail,
            password: $scope.userLoginPassword
        });
        $scope.loginModalHide();
        user.email = '';
        user.password = '';
    };

我的问题很简单。为什么会这样?有时,即使我点击了logout,也会自动调用login。

从查看您的
AuthCtrl
可以看出,您使用的是没有AngularFire绑定的FirebaseSimpleLogin。这样一来,
$digest
循环就会遇到问题。使用AngularFire的一个好处是,它使用
$digest
循环放置nice,因此我们不必担心应用范围或设置超时

AngularFire提供了
$firebaseSimpleLogin
绑定。当用户登录和注销时,
$rootScope
上会触发一个事件

app.controller('AuthCtrl', function($scope, $rootScope, $firebaseSimpleLogin) {
  var simpleLogin = $firebaseSimpleLogin(new Firebase('<your-firebase>'));

  $scope.user = {
    email: '',
    password: ''
  };

  $scope.login = function() {
    simpleLogin.$login('password', {
      email: user.email,
      password: user.password
    });
  };

  $rootScope.$on('$firebaseSimpleLogin:login', function(e, user) {
    // handler post login event
  });

  $rootScope.$on('$firebaseSimpleLogin:logout', function(e, user) {
    // handler post logout event
  });

});
app.controller('AuthCtrl',函数($scope、$rootScope、$firebasemplogin){
var simpleLogin=$firebaseSimpleLogin(新Firebase(“”));
$scope.user={
电子邮件:“”,
密码:“”
};
$scope.login=函数(){
simpleLogin.$login('password'{
电子邮件:user.email,
密码:user.password
});
};
$rootScope.$on(“$firebaseSimpleLogin:login”,函数(e,用户){
//处理程序登录后事件
});
$rootScope.$on(“$FireBaseSimpleLogon:logout”,函数(e,用户){
//处理程序注销后事件
});
});
我通常在工厂中封装
$firebaseSimpleLogin
绑定。您可以在此处查看Plunker上的演示示例:


您上面提供的代码示例不会重现您描述的错误。请提供一个复制错误的简短代码示例。@Kato因此有我的AuthCtrl和Factory:该代码或生成您描述的条件:(@Kato我不能运行整个代码,因为我使用了Appgyver类固醇,代码不能在JSFIDLE中运行。我提供了完整的Auth控制器,我认为登录函数有一切。我已经更新了它并提供了登录模式。重点是,函数只是从Firebase页面复制的。@Kato Github上有整个应用程序:非常感谢。我不会ry实现这一点并更好地学习Angular。在理解工厂等方面仍然存在问题。再次感谢!顺便说一句,Plunker演示中的简单图形很棒;)