所以我关注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
}
}])
答案 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上调用该函数!