php - Facebook JS SDK 没有设置 cookie?

标签 php facebook codeigniter cookies sdk

我使用来自最新 FB 开发人员页面的代码。在 JS SDK 中,我可以登录、获取访问 token 、进行 api 调用等。

PHP SDK getJavaScriptHelper() 为访问 token 返回空。

我检查了 fbsr_{app_id} cookie,但它不存在。我尝试用 JS 创建我自己的测试 cookie 并检索它并设置它并且我可以从 PHP 访问它所以它不是浏览器问题。

我已经设置了cookie: true,在 JS SDK 中,我使用最新的 PHP SKD v5 和 Graph Api v2.8(在我的开发人员仪表板中设置相同)。

我在 wamp 服务器本地主机上使用 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 &amp; 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());
    }
}

更新

我开始寻找我找到的解决方案 this在关于服务器 IP 白名单的 FB 开发页面中。我挂了 http://localhost:8383/test4/index.php/test_facebook/js_login但仍然返回 No cookie set or no OAuth data could be obtained from cookie.

最佳答案

看来我误解了 SDK。登录按钮小部件实际上并未在本地设置 cookie;它完全通过 Facebook 和 JavaScript 管理身份验证和访问,因此不允许您访问服务器上的身份验证 token 。

使用 JS SDK 的 FB.login() 函数确实设置了 cookie。

关于php - Facebook JS SDK 没有设置 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873313/

相关文章:

javascript - 使用 Ajax、jQuery 和 Codeigniter 根据另一个下拉列表填充下拉列表

javascript - 即使没有加载页面也运行脚本

java - 如何将 PHP 时间戳转换为在 Java 中将日期时间格式显示为字符串(与 UTC 不同)?

ruby-on-rails - OmniAuth 策略 Facebook NoAuthorizationCodeError(必须传递 `code` 参数或签名请求(通过 `signed_request` 参数):

java - RestFB 不会从特定帐户获取特定关键字的帖子吗?

php - 如何从文本区域的值中删除下划线?

php - 数据表的组合框 MySQL 过滤器

php - Laravel 5.5 导出 EXCEL

java - 通过 restFb java api 从 facebook 提取 react 数据?

codeigniter 允许在 uri 中使用特殊字符(如 : ä, é、î、ø、ù)