我已將登錄綁定到Facebook身份驗證,並且這些都是由Firebase處理的。 但是我需要對Facebook進行API調用'me/friends/'
由於我已經登錄,我將如何使用OAuth對象進行呼叫而不發出其他請求。使用Firebase登錄的Facebook API調用
我正在使用下面的封裝Angular連接到Facebook。 https://github.com/ccoenraets/OpenFB
我已將登錄綁定到Facebook身份驗證,並且這些都是由Firebase處理的。 但是我需要對Facebook進行API調用'me/friends/'
由於我已經登錄,我將如何使用OAuth對象進行呼叫而不發出其他請求。使用Firebase登錄的Facebook API調用
我正在使用下面的封裝Angular連接到Facebook。 https://github.com/ccoenraets/OpenFB
你不需要包裝。$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'];
也許這已經過時了。目前'getAuth()'不返回'user.facebook'屬性。我面臨同樣的問題。 –
@matheusrufca,我想現在(10/2016)你會使用'firebase.auth()。currentUser.providerData'。請參閱'auth' [文檔頁面](https://firebase.google.com/docs/auth/web/manage-users)。 – AlanP
@AlanP我一直在尋找存儲在用戶上的fb訪問令牌。目前,似乎獲得fb acess標記的唯一方法是使用'$ signInWithPopup'方法回調。 '$ getAuth'和'$ onAuth'不提供Facebook數據。 –
您可以在'authData.accessToken'中找到Facebook令牌。請參閱http://stackoverflow.com/questions/16688613/firebase-facebook-front-end-front-end-query/16697338#comment24081501_16697338 –
讓我知道我的回答是否適合您。如果是這樣,請將其標記爲已接受。清楚地保持未答覆的隊列是很好的。 –