Facebook PHP SDK - 未经过身份验证的用户

时间:2012-02-17 18:52:46

标签: php facebook cookies

我正在使用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;

2 个答案:

答案 0 :(得分:2)

一切似乎都是正确的。

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


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

enter image description here

因此,您可以查看facebook Cookie的生成方式。


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

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

b.-但是,由于它是一个旧图书馆,你必须做一些黑客攻击。您可以在library's forum

中查看这些简单的黑客攻击

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

答案 1 :(得分:1)

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

换句话说,请转到

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

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

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

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

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

它会神奇地开始工作。