当我使用facebook sdk时,没有获得所有数据

问题描述 投票:-2回答:2

我使用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 &amp; 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,
            ]);

        }
    }

现在回应

enter image description here

在$ fb->让我在字段中添加名称,电子邮件和喜欢,但我回应我应该命名和ID ...如何解决此错误,我得到用户连接的所有数据(姓名,电子邮件,像,图片)

php facebook symfony facebook-graph-api
2个回答
0
投票

您应该在Facebook登录时添加正确的范围(请参阅doc here中的权限部分)。例如:

FB.login(function(response) {
  // handle the response
}, {scope: 'public_profile,email,user_likes'});

希望这有帮助


0
投票

您应该在Graph API Explorer中调试图形API。优点是,它可以显示您可以访问的字段以及您应该授予哪些权限来访问字段。您试图访问字段emaillikes但您没有这样的权限来访问这些数据。图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,但所有其他权限都需要。

© www.soinside.com 2019 - 2024. All rights reserved.