为对象存储选择 KEY
Posted
技术标签:
【中文标题】为对象存储选择 KEY【英文标题】:Choosing a KEY for an object store 【发布时间】:2014-06-17 18:37:46 【问题描述】:哦,这可能是一个相对简单的问题,但我无法弄清楚(通过测试代码和谷歌搜索)。
我启用了简单登录并启用了电子邮件/密码,因此当他们登录时,使用的电子邮件将被转换为 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*
);
我尝试了 2 种不同的方法,但均无效。我尝试使用
users[authUser.md5_hash] = ...;
我也试过了
users.$save(authUser.md5_hash)
这些都不起作用。没有任何内容保存到 Firebase 数据库中。这让我感到困惑,因为我几乎 100% 确定它是决定如何将密钥保存到 Firebase 的那两个部分之一,但它什么也没做。
最终,我要做的是能够在一个人登录后“获取”用户名值。我将以一种“欢迎 Bob”的方式在导航栏上显示他们的用户名。但是,当用户登录时,他们的 md5_hash 和他们的用户名之间还没有任何关联。我必须能够从“users”表中获取用户名,并且因为我不知道他们的用户名,并且“users”表当前由他们的用户名索引或键控,所以我无法获取它.. .
还有一个快速设计问题(如果你有时间的话):
另外,这与上述问题无关,但有些相关。只是一个关于设计我的火力基地“模式”的快速问题。如果您有时间,最好能快速阅读以下内容:
正如我之前提到的,我正在使用带有电子邮件/密码的简单登录。当用户登录时,我可以访问他们电子邮件的 md5_hash。因此,为了将其他用户信息与该登录名相关联,我创建了“用户表”。我正在尝试使用 md5_hash 将登录/身份验证与所述表连接起来(因为这对每个用户都是唯一的),然后在其中存储其他有用的用户数据,例如用户名、年龄等。
这就是设计他们的 firebase 架构的方式吗?我习惯于在 SQL 中使用某种 GUID 或索引,我认为由于 md5_hash 是唯一的,我可以类似地使用它来“索引”我的 firebase users 表。就是不知道以后这样做会不会出问题。
非常感谢您的宝贵时间。对此的任何帮助或建议将不胜感激! :)
【问题讨论】:
FWIW,哈希不是唯一的...... 啊……我明白了,我不知道。我认为唯一电子邮件的哈希值会创建一个唯一的哈希值。当用户登录时,它还提供了一个 id 和 uid,我想我应该使用其中一个来代替?尽管关于如何使用 id 或 uid 而不是用户名作为键,我仍然有同样的问题。不过,感谢您对哈希的提醒! :) 【参考方案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());
);
【讨论】:
以上是关于为对象存储选择 KEY的主要内容,如果未能解决你的问题,请参考以下文章