如何"名称"注册电子邮件中的firebase数据

时间:2016-02-18 22:13:20

标签: javascript angularjs firebase

在firebase中存储用户时,如何将节点显示为电子邮件而不是图像中显示的字符。我尝试了很多不同的东西并不断出错。提前谢谢你的帮助。我很感激! :)

FireBase Img

$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');
  }
});

};

1 个答案:

答案 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);