哦,这可能是一个相对简单的问题,但这是我无法弄清楚的问题(通过测试代码和谷歌搜索)。
我启用了电子邮件/密码的简单登录,因此当他们登录时,使用的电子邮件将转换为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用户表。我只是不知道这样做是否会在将来引起一些问题。
非常感谢你的时间。任何有关此的帮助或建议将非常感谢! :)
答案 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());
});