【问题标题】:Setting users' own key in Firebase在 Firebase 中设置用户自己的密钥
【发布时间】:2015-08-04 17:22:27
【问题描述】:

这个问题已经被问到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);
});

它可以工作,但不是应该的方式,因为用户在身份验证和数据中的密钥仍然不同。

【问题讨论】:

    标签: firebase angularfire firebase-authentication firebase-realtime-database


    【解决方案1】:

    当您存储用户数据时,您通常希望键入uid。毕竟 uid 已经是唯一的,并且使用 is 作为关键确保您永远不会为同一个 uid 获得两个节点。

    当您调用$add 时,它会为您正在存储的对象生成一个新的所谓推送 ID。当您有数据列表时这很好,但在这种情况下,您的数据结构更像是映射:您将 uid 映射到用户信息。

    所以解决方法是不调用$add,而是:

    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 userInfo = {
            key         : regUser.uid, // ex: simplelogin:29
            date        : Firebase.ServerValue.TIMESTAMP,
            firstname   : user.firstname,
            lastname    : user.lastname,
            email       : user.email,
        }; // user info
    
        ref.child(regUser.uid).set(userInfo);
    });
    

    请注意,这只是使用常规的Firebase JavaScript SDK,它可以与您可能已经拥有的数据上的任何 AngularFire 侦听器完全交互。

    【讨论】:

      【解决方案2】:

      你也可以试试这样的:

      var empsRef = ref.child("http://sample.com/employees");
      
      empsRef.child('11111').set({
        lastname: "Lee",
        firstname: "Kang"
      });
      
      empsRef.child('22222').set({
        lastname: "Nut",
        firstname: "Dough"
      });

      输出应如下所示:

      "employees" : {
        "11111" : {
          "lastname" : "Lee",
          "firstname": "Kang"
        },
        "22222" : {
          "lastname" : "Nut",
          "firstname": "Dough"
        }
      }

      【讨论】:

        猜你喜欢
        • 2014-08-24
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        • 2016-06-27
        • 2012-07-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多