here과 같이 Facebook PHP SDK 및 Javascript를 사용하지 않고 서버 간 인증 흐름을 구축하려고합니다. 지금까지 사용자가 Facebook에 로그인 한 다음 내 앱으로 다시 리디렉션하고 CSFR 보호를위한 상태 매개 변수를 확인할 수있게 해주는 LoginUrl을 성공적으로 만들었습니다.PHP SDK를 사용하여 액세스 토큰에 대한 Facebook 인증 코드 교환
내 문제는 액세스 토큰에 대한 인증 코드를 바꿔야하는 API 호출이 작동하지 않는 것 같습니다. 나는 구글이 가능한 해결책을 찾다가 찾을 수 있었던 모든 비슷한 문제를 털어 놓았다. 그러나 최종 결과는 항상 동일합니다. 액세스 토큰이 없으며 평가할 수있는 오류 메시지가 없습니다.
$appUrl
의 상위 폴더 여야합니다 App Settings에 지정된 URL을 : 주제를 검토 한 결과내가 시험을 다음과 같은 조언을 얻었다.
- 사용 컬는 요청 대신 내가 바로 지금 2 일 동안 이것했던 SDK 기능
api()
를 만들기 위해 정말 도움을 사용할 수 있습니다.
<?php
require '../inc/php-sdk/src/facebook.php';
// Setting some config vars
$appId = 'MY_APP_ID';
$secret = 'MY_APP_SECRET';
$appUrl = 'https://MY_DOMAIN/appFolder';
$fbconfig = array('appId'=>$appId, 'secret'=>$secret);
$facebook = new Facebook($fbconfig);
// Log User in with Facebook and come back with Auth Code if not yet done
if(!(isset($_SESSION['login']))){
$_SESSION['login']=1;
header('Location: '.$facebook->getLoginUrl());
}
// process Callback from Facebook User Login
if($_SESSION['login']===1) {
/* CSFR Protection: getLoginUrl() generates a state string and stores it
in "$_SESSION['fb_'.$fbconfig['appId'].'_state']". This checks if it matches the state
obtained via $_GET['state']*/
if (isset($_SESSION['fb_'.$fbconfig['appId'].'_state'])&&isset($_GET['state'])){
// Good Case
if ($_SESSION['fb_'.$fbconfig['appId'].'_state']===$_GET['state']) {
$_SESSION['login']=2;
}
else {
unset($_SESSION['login']);
echo 'You may be a victim of CSFR Attacks. Try <a
href="'.$facebook->getLoginUrl().'">logging in</a> again.';
}
}
}
// State check O.K., swap Code for Token now
if($_SESSION['login']===2) {
$path = '/oauth/access_token';
$api_params = array (
'client_id'=>$appId,
'redirect_uri'=>$appUrl,
'client_secret'=>$secret,
'code'=>$_GET['code']
);
$access_token = $facebook->api($path, 'GET', $api_params);
var_dump($access_token);
}
위대한 작품입니다. – Sarke