【问题标题】:Firebase / Angularfire 0.9 - Create new user and profileFirebase / Angularfire 0.9 - 创建新用户和个人资料
【发布时间】:2015-01-29 00:47:42
【问题描述】:

要在 Angularfire 0.9 中创建新用户,我可以使用 $firebaseAuth 服务和 $createUser 方法。

但是据我所知,此方法不会返回任何新用户凭据。因此,如果我想向该用户添加配置文件,那么检索该用户身份验证数据的最佳方法是什么,特别是“uid”,这样我就可以为我的新用户保存配置文件数据。下面是我正在尝试做的一个例子

var FIREBASEURL = "https://<my-firebase>.firebaseio.com"

var ref = new Firebase(FIREBASEURL);
$rootScope.authObj = $firebaseAuth(ref);

var newUser = {
  email: "email@email.com",
  password: "password",
  displayName: "Display Name",
  favFood: "Food"
};

$rootScope.authObj.$createUser(newUser.email, newUser.password).then(function() {

  console.log("User created successfully!");

  // Retrieve new Auth Data specifically uid    

  var newAuthData = ??????????

  // Remove password from object and create user profile

  delete newUser.password;
  newUser.timestamp = Firebase.ServerValue.TIMESTAMP;

  var userRef = new Firebase(FIREBASEURL + '/users/');
  userRef.child( newAuthData.uid ).set(newUser);

}).catch(function(error) {

  console.error("Error: ", error);

});

【问题讨论】:

  • 部分回答我自己的问题,根据 Firebase Javascript API 2.0.5 更改日志“通过回调中的第二个参数公开创建的用户到 createUser()。”。这为您提供了我需要的新 Auth 的“uid”。我假设 Angularfire 库会相应更新,我会在更新时更新这个问题。

标签: javascript angularjs firebase angularfire


【解决方案1】:

在 0.9.1 中,uid 将与承诺一起返回。例如:

var FIREBASEURL = "https://<my-firebase>.firebaseio.com"

var ref = new Firebase(FIREBASEURL);
$rootScope.authObj = $firebaseAuth(ref);

var newUser = {
  email: "email@email.com",
  password: "password",
  displayName: "Display Name",
  favFood: "Food"
};

$rootScope.authObj.$createUser(newUser.email, newUser.password).then(function(authData) {
  console.log(authData.uid); //should log new uid.
  return createProfile(newUser, authData);
});


function createProfile(authData, user){         
  var profileRef = $firebase(ref.child('profile'));
  return profileRef.$set(authData.uid, user);
};

这应该会让你继续前进。关键是将返回的承诺(在我的示例中为 authData)传递给后续函数。

在0.9.0中,需要调用认证方法才能获取用户的uid。

【讨论】:

  • 虽然这确实回答了这个问题,但在允许用户写入他们的个人资料之前对用户进行身份验证通常是一个好主意,因为这大大简化了安全规则并消除了匿名写入的复杂性个人资料(很多)。
  • 是否有关于如何为用户创建、登录和添加配置文件的“漂亮”解决方案?也相反,删除用户和个人资料。还是总会有承诺和嵌套函数调用来做到这一点?考虑用户被成功删除但配置文件仍然存在的可能性。我猜一个不时运行的批处理作业可以清理失败的东西......
  • @Kato 我所做的只是询问电子邮件和密码。注册后,重定向到登录。然后用户登录以满足个人资料页面上的其他额外内容。那时,我知道用户已登录,因此保存起来非常简单。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
相关资源
最近更新 更多