首页 文章

在Firebase中设置用户自己的密钥

提问于
浏览
0

问题已经被提出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 回答

  • 2

    当您存储用户数据时,通常需要键入 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侦听器完全相互作用 .

  • 0

    你也可以尝试这样的事情:

    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"
      }
    }
    

相关问题