在firebase中存储用户时,如何将节点显示为电子邮件而不是图像中显示的字符。我尝试了很多不同的东西并不断出错。提前谢谢你的帮助。我很感激! :)
$scope.signupEmail = function(){
var ref = new Firebase("https://CoolApp.firebaseio.com");
ref.createUser({
email : $scope.data.email,
password : $scope.data.password
}, function(error, userData) {
if (error) {
console.log("Error creating user:", error);
} else {
console.log("Successfully created user account with uid:", userData.uid);
ref.child('users').push(userData);
$state.go('tab.home');
}
});
};
答案 0 :(得分:1)
请参阅Firebase documentation on storing user data:
ref.child("users").child(authData.uid).set({
provider: authData.provider,
name: getName(authData)
});
正如您所看到的,它将每个用户存储在uid
下,这保证在所有提供商中都是唯一的。
如果您想要将用户存储在他们的电子邮件地址下,您将需要做一些额外的工作。 Firebase密钥不能包含电子邮件地址中存在的特定字符(最值得注意的点:.
),因此您必须对电子邮件地址进行编码。
var encodedEmail = authData.password.email.replace('.',',')
ref.child("users").child(encodedEmail).set({
provider: authData.provider,
name: getName(authData)
});
在这种情况下,最常见的是将用户实际存储在uid
下(如第一个代码段中),并另外存储从(编码的)电子邮件地址到uid的映射。这样,您可以通过他们的uid和他们的电子邮件地址轻松获取用户:
ref.child("users").child(auth.uid).set({
provider: authData.provider,
name: getName(authData)
});
var encodedEmail = authData.password.email.replace('.',',')
ref.child("emailMappings").child(encodedEmail).set(auth.uid);