【问题标题】:Facebook PHP SDK - User not authenticatedFacebook PHP SDK - 用户未通过身份验证
【发布时间】:2012-03-09 04:16:49
【问题描述】:

我正在使用 Facebook PHP SDK 对用户进行身份验证。使用 PHP SDK 生成 LoginUrl 后,单击该 LoginUrl 的用户将被重定向到请求许可的 Facebook 页面。单击Go to App 链接后,用户将被重定向回我的网站http://www.mydomain.com/login/facebook_connect

问题:在被 Facebook“认证”后,http://www.mydomain.com/login/facebook_connect 的 PHP 脚本无法确定用户是否通过 Facebook 登录。此时$user = $facebook->getUser();为0。

我做错了吗?谢谢!

生成LoginUrl的页面的PHP代码

require 'libs/fb-php-sdk/facebook.php';

// Create our Application instance
$facebook = new Facebook(array(
  'appId'  => '123',
  'secret' => '123'
));

// Get User ID
$user = $facebook->getUser();

// Get Login URL
$loginUrl = $facebook->getLoginUrl(array(
    "scope" => "email,user_education_history,user_work_history",
    "redirect_uri" => "http://www.mydomain.com/login/facebook_connect/"
));

$data['fb_login_url'] = $loginUrl;

$this->load->view('splash', $data);

页面用户的 PHP 代码在 Facebook 身份验证后被重定向到

*http://www.mydomain.com/login/facebook_connect/*

require 'libs/fb-php-sdk/facebook.php';

    $facebook = new Facebook(array(
        'appId'  => '123',
        'secret' => '123',
    ));

    // See if there is a user from a cookie
    $user = $facebook->getUser();

    // We may or may not have this data based on whether the user is logged in.
    //
    // If we have a $user id here, it means we know the user is logged into
    // Facebook, but we don't know if the access token is valid. An access
    // token is invalid if the user logged out of Facebook.

    if ($user) {
      try {
        // Proceed knowing you have a logged in user who's authenticated.
        $user_profile = $facebook->api('/me');
      } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
      }
    }

    print_r($user_profile);
    echo $user;

【问题讨论】:

  • 当 facebook 重定向回您的网站时,您是否检查了完整的网址?应该有一个 access_token 参数。
  • 重定向现在工作正常,使用redirect_uri 而不是next
  • 这是我从 Facebook 身份验证页面重定向回我的网站后得到的网址:http://www.mydomain.com/facebook_pickup.php?state=f210c06a9854f43edd12bdb57993e1da&code=AQCUp3YsSVNa2LfnKR1EXr_wq3BapIHJ5qr7nNury0fJQidb-nnkn2ZIxImMvN92CtiLwkZTmmzWelv9Lt8EDor2Q2YmKSDI6OoFTiNe8OZdDLLO5YATYA4-Bc1_y8qOcwOzq8-gzj4u__BwuLJLJFYe4e4plXgREYK6EbTXB872QCtz2aiSen0dpHPSdkfXncs#_=_ 没有 access_token 参数...

标签: php facebook cookies


【解决方案1】:

一切似乎都正确。

问题:
1.- 我想http://www.mydomain.com/ 包含你所有的脚本,对吧?
2.-你在使用codeigniter吗?还是基于 codeigniter 的 CMS?在这种情况下,您可能会遇到会话问题(在 CI 中很常见)。检查一下,我们继续...


编辑 2:如果是 cookie 相关问题。这是一张图片,显示您可以使用带有 cookie 模块的 firebug 轻松跟踪您的 cookie:

这样您就可以检查 facebook cookie 是如何生成的。


编辑 3:好的。因此,您正在使用 CI,并且您的 FB cookie 正在被删除。也许是会话问题。这是related answer,我在其中解释了如何使用会话 CI 库替换来解决所有这些痛苦的问题。相信我,试试看!

a.- 这里是:Codeigniter's Native session(底部有下载链接)

b.- 但是,由于它是一个旧图书馆,您必须进行一些修改。您可以在library's forum 中查看这些简单的技巧

c.- 只需将此文件放到 codeigniter 的库目录中即可。

【讨论】:

  • :) 我知道! Milan Babuškov给出的答案似乎相当巧妙。如果不起作用,我可以向您推荐基于会话的解决方案。我会在这里...
  • 我很困惑为什么 Codeigniter 会删除 facebook cookie? Facebook 设置的 cookie 是在 Facebook 为我的网站验证用户身份后立即创建的吗?还是 PHP SDK 设置了 cookie?
  • 如上图所示,cookie 是由 FB 植入的。所以我真的认为这是一个 CI 问题。尝试会话解决方案(EDIT 3)并查看。祝同事好运!
【解决方案2】:

$facebook->getUser() 使用 cookie 来获取用户。如果您使用 CodeIgniter 或其他“吃掉”PHP 自动分配的 cookie 的库,则需要在 CI 之外创建一个代理页面,该页面将获取重定向回 CI 的 cookie。

换句话说,拿你目前在

中的代码
http://www.mydomain.com/login/facebook_connect/

并在常规 PHP 文件中创建一个副本:

http://www.mydomain.com/facebook_pickup.php

不要从脚本中回显任何内容(删除 print_r),只需重定向到

http://www.mydomain.com/login/facebook_connect/

它会神奇地开始工作。

【讨论】:

  • 有没有办法阻止 Codeigniter 自动为该控制器功能吃掉 cookie?
  • 我可以只包含在http://www.mydomain.com/facebook_pickup.php $facebook = new Facebook(array( 'appId' => '123', 'secret' => '123', )); // See if there is a user from a cookie $user = $facebook->getUser(); 中,并且在第二次重定向之后仍然可以从http://www.mydomain.com/login/facebook_connect/ 访问$facebook 和$user 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 2015-11-08
  • 2011-07-09
  • 2018-11-15
  • 1970-01-01
相关资源
最近更新 更多