使用Javascript和PHP登录Facebook
几天来我一直在努力解决这个问题,但似乎不明白我做错了什么。这个想法是让用户使用Javascript登录,并在将用户信息输入数据库之前通过PHP进行重新验证,但它一直说不能从cookie中获得cookie集或OAuth数据 index.php:使用Javascript和PHP登录Facebook,javascript,php,facebook,cookies,Javascript,Php,Facebook,Cookies,几天来我一直在努力解决这个问题,但似乎不明白我做错了什么。这个想法是让用户使用Javascript登录,并在将用户信息输入数据库之前通过PHP进行重新验证,但它一直说不能从cookie中获得cookie集或OAuth数据 index.php: var appLoginFlag = false; var appAccessToken = null; window.fbAsyncInit = function() { FB.init({
var appLoginFlag = false;
var appAccessToken = null;
window.fbAsyncInit = function() {
FB.init({
appId: 'xxxxxxxxx',
cookie: true,
status: true,
xfbml: true,
oauth: true,
version: 'v2.2'
});
checkLoginState();
};
function statusChangeCallback(response) {
if (response.status === 'connected') {
appLoginFlag = true;
if (response.authResponse) {
console.log(response.authResponse);
FB.api('/me?fields=id,name,first_name,last_name,email', function(response) {
console.log('Email: ' + response.email);
console.log('Name: ' + response.name);
$.ajax({
type: "POST",
url: "user_insert.php",
success: function(result) {
document.getElementById('login-wrap').innerHTML = 'Hi <strong>' + response.first_name + '</strong>!';
}
});
});
}
}
else {
console.log(response.status);
appLoginFlag = false;
}
}
function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {
return;
}
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
} (document, 'script', 'facebook-jssdk'));
function FBLogin() {
FB.login(function(response) {
FB.api("/me/feed", "post", {message: "Some message"}, statusChangeCallback(response));
},
{scope: 'public_profile, email, publish_actions'
});
}
user_insert.php:
<?php session_start();
require_once __DIR__ . '/facebook-sdk-v5/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => 'xxxxxxxxxxxxxx',
'app_secret' => 'xxxxxxxxxxxxxxxxxxxx',
'default_graph_version' => 'v2.2',
]);
$helper = $fb->getJavaScriptHelper();
try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
if (! isset($accessToken)) {
echo 'No cookie set or no OAuth data could be obtained from cookie.';
exit;
}
echo '<h3>Access Token</h3>';
var_dump($accessToken->getValue());
$_SESSION['fb_access_token'] = (string) $accessToken;
// Now you can redirect to another page and use the
// access token from $_SESSION['facebook_access_token']
// instructions to insert into database
?>
最后,我做对了。问题在于API版本。在我的Facebook应用程序仪表板中,我在为V2.2编码时使用了V2.4