Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS+;火基。注销后,旧用户数据仍然存在。在firebase上创建新帐户和旧用户数据将被替换_Angularjs_Firebase - Fatal编程技术网

AngularJS+;火基。注销后,旧用户数据仍然存在。在firebase上创建新帐户和旧用户数据将被替换

AngularJS+;火基。注销后,旧用户数据仍然存在。在firebase上创建新帐户和旧用户数据将被替换,angularjs,firebase,Angularjs,Firebase,所以,我遵循thinksters fantasy football应用程序教程,但每当我注销并尝试创建新帐户时。将创建新帐户,并用新用户信息替换firebase上旧用户的所有信息 我猜这是一个范围问题,在注销时没有得到清除 'use strict'; /* Services */ angular.module('fantasyApp.services.login', ['fantasyApp.services.profileCreator']) .factory('loginServic

所以,我遵循thinksters fantasy football应用程序教程,但每当我注销并尝试创建新帐户时。将创建新帐户,并用新用户信息替换firebase上旧用户的所有信息

我猜这是一个范围问题,在注销时没有得到清除

'use strict';

/* Services */

angular.module('fantasyApp.services.login', ['fantasyApp.services.profileCreator'])
  .factory('loginService', ['angularFireAuth', 'profileCreator', '$location', '$rootScope',
  function(angularFireAuth, profileCreator, $location, $rootScope) {
  return {
    login: function(email, pass, redirect, callback) {
      var p = angularFireAuth.login('password', {
        email: email,
        password: pass,
        rememberMe: true
      });
      p.then(function(user) {
        if( redirect ) {
          $location.path(redirect);
        }
        callback && callback(null, user);
      }, callback);
    },
    logout: function(redirectPath) {
      angularFireAuth.logout();
      if(redirectPath) {
        $location.path(redirectPath);
        $scope.destroy()
      }
    },
    createAccount: function(name, email, mobile, pass, callback) {
      angularFireAuth._authClient.createUser(email, pass, function(err, user) {
        if(callback) {
          callback(err, user);
          $rootScope.$apply();
        }
      });
    },
    createProfile: profileCreator
  }
}])

嘿,这个git项目没有我们现在遇到的问题,所以我将以他的代码为例,试图找出我们做错了什么

更新:找到了


它位于第63行的函数中,但在注销第31行调用该函数

这个问题与app/js/controllers/headercontroller.js文件中的这段代码有关

$scope.$on('angularFireAuth:login', function() { 
    angularFire(new Firebase(FBURL+'/users/'+$scope.auth.id), $scope, 'user'); 
});
这里发生的事情是,每次
angularfieauth:login
get的$broadcast'd,我们都将
$scope.user
连接到位于
FBURL+'/users/'+$scope.auth.id
的Firebase引用。现在的问题是,如果您注销,然后重新登录,
angularFireAuth:login
将获得$broadcast'd两次。这不会是一个问题,除非我们在回叫中旋转一个角火。这样做的结果是,我们现在有两个
angularFire
s绑定到
$scope.user
。这意味着,如果
$scope.user
发生更改,我们将写入两个独立的Firebase ref

如果我们将
angularFire
附加到
$scope.user
上,例如
$scope.user
设置为
{name:“Tyler”}
,那么当我们注销并重新登录时,
$scope.user
的当前值将写入新的
angularFire
,该值绑定到不同用户的路径。这导致了这种奇怪的帐户覆盖行为

无论如何,解决方案是使用
disassociate()
方法,该方法在
angularFire
的承诺得到解决时传递

例如,试试这个

$scope.$on('angularFireAuth:login', function() { 
  if ($scope.disassociateUserData) { 
      $scope.disassociateUserData();
  } 
  angularFire(new Firebase(FBURL+'/users/'+$scope.auth.id), $scope, 'user').then(function (disassociate) { 
      $scope.disassociateUserData = disassociate; 
  }; 
});
$scope.$on('angularFireAuth:login', function() { 
  if ($scope.disassociateUserData) { 
      $scope.disassociateUserData();
  } 
  angularFire(new Firebase(FBURL+'/users/'+$scope.auth.id), $scope, 'user').then(function (disassociate) { 
      $scope.disassociateUserData = disassociate; 
  }; 
});