Я использую Facebook Javascript SDK для входа в систему и проверяю его с помощью PHP Graph SDK v5.x
Вот JS:
logInWithFacebook = function() {
FB.login(function(response) {
if (response.authResponse) {
console.log (response.authResponse);
$.ajax({
type: 'POST',
url: 'facebook-validate-php-sdk.php',
data: response.authResponse,
success: function(response){
console.log (response);
//Success
}
});
} else {
alert('User canceled login or did not fully authorize.');
}
}, {scope: 'user_link, email'});
return false;
};
window.fbAsyncInit = function() {
FB.init({
appId: 'xxx',
cookie: false,
version: 'v9.0'
});
};
Вот PHP, который проверяет:
require_once 'php-graph-sdk-5.x/autoload.php';
$fb = new FacebookFacebook([
'app_id' => 'xxx',
'app_secret' => 'xxx',
'default_graph_version' => 'v9.0',
]);
//$helper = $fb->getJavaScriptHelper();
try {
//$accessToken = $helper->getAccessToken();
$accessToken = $_POST['accessToken'];
}catch(FacebookExceptionResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(FacebookExceptionSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
if (! isset($accessToken)) {
echo 'No OAuth data could be obtained.';
exit;
}
// User is logged in!
//Get Data
try {
// Returns a `FacebookResponse` object
$response = $fb->get('/me?fields=name,first_name,last_name,email,link,gender,picture.type(large),birthday', $accessToken);
} catch(FacebookExceptionResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(FacebookExceptionSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$user = $response->getGraphUser();
var_dump ($user);
Как видите, я решил передать токен доступа с помощью POST вместо файла cookie. Поскольку я не собираюсь создавать сеанс по своему проекту, я решил, что это будет лучше всего. Было бы это правильным предположением? Этот код безопасен? Есть какие-нибудь советы или мысли?