使用Firebase登录的Facebook API调用

时间:2015-11-30 01:34:33

标签: javascript angularjs facebook firebase angularfire

我的登录与Facebook身份验证相关联,这一切都由Firebase处理。 但是我需要对Facebook进行API调用'me/friends/' 由于我已经登录,如何在不发出其他请求的情况下使用OAuth对象进行调用。

我正在使用Angular的以下包装来连接Facebook。 https://github.com/ccoenraets/OpenFB

1 个答案:

答案 0 :(得分:4)

您不需要包装器。 $firebaseAuth() + $http() =简单的图形API请求。

Graph API非常易于使用,可以轻松使用Firebase。

确保您已启用Facebook好友权限,否则您将无法获得任何数据。

您可以使用$firebaseAuth()登录并获取Facebook access_token。该令牌可用于图谱API,以通过HTTP请求获取数据。 Angular有一个很好的$http库来进行这些调用。

不介意我构建代码的方式,我更喜欢使用Angular styleguide

angular.module('app', ['firebase'])
  .constant('FirebaseUrl', 'https://<my-firebase-app>.firebaseio.com/')
  .constant('FacebookAppId', '<app-id>')
  .service('RootRef', ['FirebaseUrl', Firebase])
  .factory('Auth', Auth)
  .factory('Friends', Friends)
  .controller('MainCtrl', MainCtrl);

function Friends($http, RootRef, $q, FacebookAppId) {

  function getFriends() {
    // get the currently logged in user (may be null)
    var user = RootRef.getAuth();
    var deferred = $q.defer();
    var token = null;
    var endpoint = "https://graph.facebook.com/me/friends?access_token="

    // if there is no logged in user, call reject 
    // with the error and return the promise
    if (!user) {
      deferred.reject('error');
      return deferred.promise;
    } else {
      // There is a user, get the token
      token = user.facebook.accessToken;
      // append the token onto the endpoint
      endpoint = endpoint + token;
    }

    // Make the http call
    $http.get(endpoint)
      .then(function(data) {
        deferred.resolve(data);
      })
      .catch(function(error) {
        deferred.reject(error);
      });

    // return the promise
    return deferred.promise;
  }

  return {
    get: getFriends
  };
}
Friends.$inject = ['$http', 'RootRef', '$q', 'FacebookAppId'];

function Auth($firebaseAuth, RootRef) {
  return $firebaseAuth(RootRef);
}
Auth.$inject = ['FirebaseAuth', 'RootRef'];

function MainCtrl($scope, Friends) {

  $scope.login = function login() {
    Auth.$authWithOAuthPopup('facebook').then(function(authData) {
      console.log(authData, 'logged in!');
    });
  };

  $scope.getFriends = function getFriends() {
    Friends.get()
      .then(function(result) {
        console.log(result.data);
      });
  };

}
MainCtrl.$inject = ['$scope', 'Friends'];