如何使用firebase简单登录facebook来处理用户信息

时间:2014-05-19 15:42:38

标签: javascript facebook angularjs firebase facebook-login

我正在使用AngularJS和Firebase构建网页。我想使用facebook登录来与用户连接网页上的信息。 Firebase有一个简单登录版本,我想这应该简化登录过程。 我的问题是我想在我的网页上的很多地方访问有关登录用户的信息,但我找不到一个好办法。

这就是我的开始:

var userInfo = null;

var ref = new Firebase('https://<yourfirebase>.firebaseIO.com/');

var auth = new FirebaseSimpleLogin(ref, function(error, user) {
if(error)
    alert("You are not logged in");
else if(user)
{
    //store userinfo in variable
    userInfo = user;
}
else
    //user logged out
});

//do something with userInfo
alert(userInfo.name);

我的第一个想法是在我的页面顶部运行它,然后使用有关用户的信息。问题是使用userInfo的代码(例如在警报中)将始终在填充userInfo变量之前运行,userInfo将返回undefined / null。

然后,当我想要检索用户数据时,我继续创建一个新的firebasesimplelogin对象。这当然不是很好。特别是因为每当调用另一个或用户注销时,将再次调用每个创建的FirebaseSimpleLogin对象。

所以我的问题是,如何使用FirebaseSimpleLogin以最佳方式处理和使用我的用户信息?

我会喜欢getUserInfo()或检查isLoggedIn()等函数。你怎么做得好?

2 个答案:

答案 0 :(得分:2)

你可以看看这个示例的thinkster。它基于使用用户ID /密码的简单登录。 http://www.thinkster.io/angularjs/4DYrJRxTyT/7-creating-your-own-user-data-using-firebase

您可以创建一个像$ rootScope一样运行的函数getLoggedinUser,它允许您在整个应用程序中查找用户。

更新:

2014年10月中旬,firebase发生了一些重大变化。这种方法可能仍然有效,但最好还是利用更新版本的firebase,特别是getauth和onauth。这些方法允许您在不运行rootScope的情况下执行相同的操作。 https://www.firebase.com/docs/web/guide/user-auth.html#section-login

答案 1 :(得分:2)

请在您的应用中随处使用它

   .constant('facebookUrl', 'https://rjrestaurantapp.firebaseio.com');

然后在控制器中注入这个常量“facebookUrl&amp;”$ state“,如下所示......

   .controller('loginCtrl', function($scope,facebookUrl,$state){

然后你只需要在facebook认证后给出你要重定向的州的名称..

 var ref = new Firebase(facebookUrl);
 $scope.fbLogin = function () {
 ref.authWithOAuthPopup("facebook", function(error, authData) {
    if (error) {
      console.log("Login Failed!", error);
    } else {
      console.log("Authenticated successfully with payload:", authData);
      $state.go('restaurant');
   }
 })
}})

使用Facebook ....

成功验证后,您可以在authData对象中看到这些信息

请仔细阅读本文档https://www.firebase.com/docs/web/guide/login/facebook.html

以上是使用firebase进行简单登录并为每个登录用户检索数据的示例,您必须在登录时存储用户信息,因为您知道firebase使每个孩子都拥有唯一的ID ..然后您只需要使用firebase的脱机功能来查找哪个用户处于脱机状态,并根据该功能删除具有相同ID的一个脱机的节点,您可以在 MANAGING PRESENCE 部分找到示例。以下链接..

https://www.firebase.com/docs/web/guide/offline-capabilities.html