我使用facebook sdk但是当我得到数据用户连接时我有错误
代码树枝和js:
{% extends 'base.html.twig' %}
{% block body %}
<a href="#" onClick="logInWithFacebook()">test</a>
{% endblock %}
{% block javascripts%}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
logInWithFacebook = function() {
FB.login(function(response) {
if (response.authResponse) {
console.log(response);
var $data = {
'token': response.authResponse.accessToken,
}
$.ajax({
type: "POST",
url: "http://localhost/testfb/web/app_dev.php",
data: $data,
context: document.body
}).done(function(response) {
//console.log(response);
});
//alert('You are logged in & cookie set!');
// Now you can redirect the user or do an AJAX request to
// a PHP script that grabs the signed request from the cookie.
} else {
alert('User cancelled login or did not fully authorize.');
}
});
return false;
};
window.fbAsyncInit = function() {
FB.init({
appId: '371059814596960',
cookie: true, // This is important, it's not enabled by default
version: 'v2.11'
});
};
(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 = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
{%endblock%}
代码php:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Facebook\Facebook;
class DefaultController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
// replace this example code with whatever you need
$fb = new Facebook([
'app_id' => '371059841209960', // Replace {app-id} with your app id
'app_secret' => 'secret_key',
'default_graph_version' => 'v2.11',
]);
if ($request->isMethod('POST')) {
$token = $request->request->get('token');
$helper = $fb->getJavaScriptHelper();
$response= $fb->get('/me?locale=en_US&fields=name,email,likes',$token);
$userNode = $response->getGraphUser();
var_dump($userNode);
}
return $this->render('default/index.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
]);
}
}
现在回应
在$ fb->让我在字段中添加名称,电子邮件和喜欢,但我回应我应该命名和ID ...如何解决此错误,我得到用户连接的所有数据(姓名,电子邮件,像,图片)
您应该在Facebook登录时添加正确的范围(请参阅doc here中的权限部分)。例如:
FB.login(function(response) {
// handle the response
}, {scope: 'public_profile,email,user_likes'});
希望这有帮助
您应该在Graph API Explorer中调试图形API。优点是,它可以显示您可以访问的字段以及您应该授予哪些权限来访问字段。您试图访问字段email
和likes
但您没有这样的权限来访问这些数据。图API Explorer将显示以下消息:
只有在用户授予“email”权限后,才能在User对象上访问“email”字段。
只有在用户授予'user_likes'权限后,才能在User对象上访问“喜欢”字段。
在知道应授予哪些权限后,应在调用FB.login()
时设置范围,Facebook Javascript SDK Reference中记录了FB.login(function(response) {
// handle the response
}, {scope: 'email,user_likes'});
。
Permissions Reference
但是,并非所有用户的数据都可供访问。据qazxswpoi说:
基本权限(public_profile,user_friends和email)不需要Review,但所有其他权限都需要。