问题已经被提出here,但是由于AngularFire更新了他们的API,所提供的解决方案不再可用 .
我正在做的是使用电子邮件/密码创建新用户的帐户,将该用户存储在Firebase身份验证服务中,并将额外信息存储在数据库中 .
但是,在身份验证中,用户的密钥为 simplelogin:29
,在数据中,每个用户都有其哈希密钥,如 -JpwB9oUVkeT_XRdiX2V
. 我确实需要他们的钥匙是一样的 .
下面是创建新用户的代码,使用auth . $ createUser注册并在用户模型中存储额外信息 .
var ref = new Firebase('https://myapp.firebaseio.com/');
var auth = $firebaseAuth(ref);
auth.$createUser({
email: user.email,
password: user.password
}).then(function(regUser) {
var ref = new Firebase('https://myapp.firebaseio.com/users/')
var firebaseUser = $firebaseArray(ref);
var userInfo = {
key : regUser.uid, // ex: simplelogin:29
date : Firebase.ServerValue.TIMESTAMP,
firstname : user.firstname,
lastname : user.lastname,
email : user.email,
}; // user info
firebaseUser.$add(userInfo);
});
它可以工作,但不是应该的方式,因为用户在身份验证和数据中的密钥仍然不同 .
2 回答
当您存储用户数据时,通常需要键入
uid
. 毕竟uid
已经是唯一的并且使用is作为密钥确保您永远不会为同一个uid
结束两个节点 .当您调用
$add
时,它会为您正在存储的对象生成一个新的所谓推送ID . 当您拥有数据列表时,这非常棒,但在这种情况下,您的数据结构更像是:您将uid
映射到用户信息 .因此解决方案是不要调用
$add
,而是:请注意,这只是使用常规Firebase JavaScript SDK,它将与您可能已经拥有的任何AngularFire侦听器完全相互作用 .
你也可以尝试这样的事情:
输出应如下所示: