我使用来自最新FB开发者页面的代码。在JS SDK中,我可以登录,获取访问令牌,进行api调用等。
PHP SDK getJavaScriptHelper()为访问令牌返回空。
我已经检查了fbsr_ {app_id} cookie但它不存在。我尝试使用JS创建自己的测试cookie并进行检索并设置它,我可以从PHP访问它,因此它不是浏览器问题。
我在JS SDK中设置了cookie: true,
,我使用了最新的PHP SKD v5和Graph Api v2.8(在我的开发人员仪表板中设置了相同的内容)。
我在wamp服务器localhost上使用CodeIgniter。
我无法思考或找到任何其他东西,花了一整天的时间。任何帮助将不胜感激!
代码:
<html>
<body>
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<p><a href="#" onClick="logInWithFacebook()">Log In with the JavaScript SDK</a></p>
<script>
logInWithFacebook = function() {
FB.login(function(response) {
if (response.authResponse) {
console.log('You are logged in & cookie set!');
console.log(response);
// Now you can redirect the user or do an AJAX request to
// a PHP script that grabs the signed request from the cookie.
$.get('<?php echo base_url() ?>index.php/test_facebook/js_login', function(resp){
console.log('Get response' + resp);
});
} else {
console.log('User cancelled login or did not fully authorize.');
}
});
return false;
};
window.fbAsyncInit = function() {
FB.init({
appId: '{app-id}',
cookie: true,
version: 'v2.8'
});
};
(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'));
</script>
</body>
</html>
和test_facebook / js_login:
<?php
class Test_facebook extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->load->view('test_facebook');
}
public function js_login(){
# /js-login.php
require_once( 'vendor/autoload.php' );
$fb = new Facebook\Facebook([
'app_id' => '{app-id}',
'app_secret' => '{app-secret}',
'default_graph_version' => 'v2.8',
]);
$helper = $fb->getJavaScriptHelper();
try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
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;
}
// Logged in
echo '<h3>Access Token</h3>';
var_dump($accessToken->getValue());
}
}
更新
我计划寻找解决方案,我在FB开发者页面中找到了有关服务器IP白名单的this。我列出了http://localhost:8383/test4/index.php/test_facebook/js_login
但仍然返回No cookie set or no OAuth data could be obtained from cookie.
答案 0 :(得分:0)
看来我误解了SDK。登录按钮小部件实际上并未在本地设置Cookie;它完全管理通过Facebook和JavaScript进行的身份验证和访问,因此不允许您访问服务器上的身份验证令牌。
使用JS SDK的FB.login()函数确实设置了cookie。