2015-11-30 146 views
3

我已將登錄綁定到Facebook身份驗證,並且這些都是由Firebase處理的。 但是我需要對Facebook進行API調用'me/friends/' 由於我已經登錄,我將如何使用OAuth對象進行呼叫而不發出其他請求。使用Firebase登錄的Facebook API調用

我正在使用下面的封裝Angular連接到Facebook。 https://github.com/ccoenraets/OpenFB

+1

您可以在'authData.accessToken'中找到Facebook令牌。請參閱http://stackoverflow.com/questions/16688613/firebase-facebook-front-end-front-end-query/16697338#comment24081501_16697338 –

+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']; 
+0

也許這已經過時了。目前'getAuth()'不返回'user.facebook'屬性。我面臨同樣的問題。 –

+0

@matheusrufca,我想現在(10/2016)你會使用'firebase.auth()。currentUser.providerData'。請參閱'auth' [文檔頁面](https://firebase.google.com/docs/auth/web/manage-users)。 – AlanP

+0

@AlanP我一直在尋找存儲在用戶上的fb訪問令牌。目前,似乎獲得fb acess標記的唯一方法是使用'$ signInWithPopup'方法回調。 '$ getAuth'和'$ onAuth'不提供Facebook數據。 –