AngularJS + Firebase。注销旧用户数据后仍然存在。在firebase上替换创建新帐户和旧用户数据

时间:2013-12-01 03:56:34

标签: angularjs firebase

所以我关注thinkters幻想足球应用程序教程,但每当我退出并尝试创建一个新帐户。创建新帐户并使用新用户信息替换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
  }
}])

2 个答案:

答案 0 :(得分:1)

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

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

这里发生的事情是每次angularFireAuth:login获得$ $广播时,我们会将$scope.user与位于FBURL+'/users/'+$scope.auth.id的Firebase参考号联系起来。现在,问题是,如果您注销,然后重新登录,angularFireAuth:login将获得$ broadcast'd两次。这不是问题,除了我们在回调中旋转angularFire这一事实。结果是我们现在有两个angularFire绑定到$scope.user。这意味着,如果$scope.user发生变化,我们会写两个单独的Firebase参考号。

如果我们将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; }; }); 方法。

例如,试试这个。

{{1}}

答案 1 :(得分:0)

嘿,这个家伙git项目没有我们遇到的相同问题,所以我将以他的代码为例,试图弄清楚我们做错了什么。

http://github.com/mattmalenczak/angularfire-login-boilerplate

更新:发现它!

https://github.com/mattmalenczak/angularfire-login-boilerplate/blob/master/js/controllers.js

disassociate();

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