选择对象库的KEY

时间:2014-06-17 18:37:47

标签: firebase

哦,这可能是一个相对简单的问题,但这是我无法弄清楚的问题(通过测试代码和谷歌搜索)。

我启用了电子邮件/密码的简单登录,因此当他们登录时,使用的电子邮件将转换为md5_hash。

我创建了一个“用户”对象商店,目前看起来像这样:

users
  |____ Bob
         |__ md5_hash: 8120jf283
         |__ username: Bob
  |____ Alice
         |__ md5_hash: 2938njv29
         |__ username: Alice
  |____ Chris
         |__ md5_hash: 230948mv2
         |__ username: Chris

我的问题是:如何更改“架构”以便用md5_hash存储用户,而不是用户名?您可以在上面看到它正在存储Bob,Alice和Chris的用户。如果我可以通过他们的md5_hash存储它们对我来说会更好,所以它会像这样:

Users
  |___ 02938492
    |__ md5_hash: 02938492
    |__ username: Bob

以下是我用来创建用户并将其保存到Firebase数据库中的代码:

var ref = new Firebase(FIREBASE_URL + 'users');
var users = $firebase(ref);

function(authUser, username) {
    users[username] = {
        md5_hash: authUser.md5_hash,
        username: username,
        $priority: authUser.uid
    };
    users.$save(username).then(function() {
        *do something here in callback*
    });

我尝试过两种不起作用的东西。我尝试使用

users[authUser.md5_hash] = {...}; 

我也试过

users.$save(authUser.md5_hash)

这些都不奏效。没有任何内容会保存到Firebase数据库中。这让我感到困惑,因为我几乎100%确定它是确定密钥保存到firebase的两个部分之一,但它没有做任何事情。

ULTIMATELY,我正在尝试做的是能够在用户登录后“抓取”用户名值。我将以一种“欢迎Bob”的方式在导航栏上显示他们的用户名。但是,当用户登录时,他们的md5_hash与其用户名之间还没有任何关联。我必须能够从“用户”表中获取用户名,并且由于我不知道他们的用户名,并且“用户”表当前已被其用户名索引或键入,我无法获取它。

快速设计问题(如果你有时间):

此外,这与上述问题没有关系,但它有些相关。关于设计我的firebase“架构”的一个简单问题。如果你有时间,如果你能快速阅读下面的话会很棒:

正如我之前提到的,我正在使用简单登录电子邮件/密码。当用户登录时,我可以访问其电子邮件的md5_hash。因此,为了将其他用户信息与该登录相关联,我创建了“用户表”。我正在尝试使用md5_hash将登录/身份验证与所述表连接(因为这对每个用户都是唯一的),然后在其中存储其他有用的用户数据,如用户名,年龄等。

这是人们如何设计他们的firebase架构吗?我习惯在SQL中使用某种GUID或索引,我认为由于md5_hash是唯一的,我可以类似地使用它来“索引”我的firebase用户表。我只是不知道这样做是否会在将来引起一些问题。

非常感谢你的时间。任何有关此的帮助或建议将非常感谢! :)

1 个答案:

答案 0 :(得分:1)

使用简单登录,用唯一ID创建用户:

var fbRef = new Firebase(URL);
var auth = new FirebaseSimpleLogin(fbRef);
auth.createUser(email, password, function(error, user) {
  if( error ) throw error;
  console.log('unique id', user.uid);
});

您可以将其用于您的唯一标识符。如果不够,您可以从Firebase push()命令获取唯一ID:

var fbRef = new Firebase(URL);
var uniqueId = fbRef.push().name();
fbRef.child('users/'+fbRef).set(userData);

// or even shorter
var uniqueId = fbRef.push(userData).name();

使用AngularFire,您只需调用$ add而不是$ save来创建唯一ID:

var users = $firebase(fbRef);
users.$add( userData ).then(function(ref) {
   console.log('unique id', ref.name());
});