2014-07-04 80 views
2

我有一个用户存储的FireBase数据库。我也使用简单的登录电子邮件/密码。在用户商店中,我保存了一些用户的额外信息 - 例如lastlogin日期。这是我的工作流程 - 从注册到登录:AngularFire简单登录

我注册了一个用户; 当注册时添加到简单的登录电子邮件/ pw sote; 我还在用户存储中添加了注册用户(包括从simplelogin返回的id)。它存储在Firebase生成的唯一密钥下。

我登录为新用户 如果成功我从simplelogin存储用户对象:

email-"[email protected]" 
firebaseAuthToken-"eyJ0eXAiOiJKV1QiLCJhbGci...SoXkddR3A88vAkENCy5ilIk" 
id-"46" 
isTemporaryPassword-false 
md5_hash-"6a4b6cb2045fd55f706eaebd6ab5d4f7" 
provider-"password" 
uid-"simplelogin:46" 

现在我想更新用户存储相应的用户 - 例如将lastlogin键设置为现在。但是我只能在知道Firebase生成密钥时更新该用户。我怎样才能访问该密钥?

在用户存储中识别用户的唯一方法是检索用户存储中的所有用户,遍历所有用户并检查:当前的id键值是否与登录的id键值匹配用户。看起来有点笨拙,但我担心这是我可以使用Firebase进行查找的唯一方法吗?

+0

请不要添加额外的问题,其他人的anwers,使用注释或者你原来的问题,而不是。 – jgillich

回答

1

当你保存一个注册用户时,你应该通过他们的uid而不是生成的id来保存它们。这样,当用户重新登录时,我们将使用uid从用户节点获取用户。

var fbRef = new Firebase('https://<YOUR-FIREBASE>.firebaseio.com'); 
var auth = new FirebaseSimpleLogin(fbRef, function(error, user) { 
    if (error) { 
    console.error(error); 
    } else if (user) { 
    // when a user logs in we can update their lastLogin here 
    // set the key to the uid for the user 
    // this would look like: https://myapp.firebaseio.com/users/1 
    fbRef.child('users').child(user.uid).update({ 
     lastLogin: Firebase.ServerValue.TIMESTAMP // the time they logged in 
    }); 
    } 
}); 

// here when we create a user we will set the key to the uid under the users node 
auth.createUser(email, password, function(error, user) { 
    // if there is no error 
    if (!error) { 
    // go to the users node, then set a location at the user's uid 
    // this would look like: https://myapp.firebaseio.com/users/1 
    fbRef.child('users').child(user.uid).set(user); 
    } 
}); 

当用户创建我们的用户节点将是这样的:

Users node

+0

谢谢。是否有可能在用当前时间戳(fbRef.child('users'))覆盖之前'保存'lastLogin值。child(user.uid).update({lastLogin:Firebase.ServerValue.TIMESTAMP //他们记录的时间in});)?我想让用户看到他上次登录的时间。 – marc

+0

你完全可以将它保存在某个地方,这取决于你想要做什么。你想维护他们登录的所有时间的列表吗? –

+0

我想要的是用户认证成功后1)从用户存储中检索相应的用户 - 调用它的userData 2)将该userData.loginTimeStamp值保存到$ scope变量以显示在页面上3)更新userData .loginTimeStamp到当前时间戳。你告诉我怎么做3),我不能通过做userData = usersRef.child(user.id)来访问userData对象的值; console.log(userData.loginTimestamp) – marc