2012-02-17 67 views
1

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

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

我做错了什么?谢谢!

PHP代码的页面,生成LoginUrl

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; 
+0

当facebook重定向回您的网站时,您是否检查完整的网址?应该有一个access_token参数。 – 2012-02-17 21:16:25

+0

重定向现在工作正常,使用'redirect_uri'而不是'next'。 – Nyxynyx 2012-02-17 22:16:40

+0

这是URL重定向后,我回到我的网站从Facebook认证页面:'HTTP://www.mydomain.com/facebook_pickup.php状态= f210c06a9854f43edd12bdb57993e1da&代码= AQCUp3YsSVNa2LfnKR1EXr_wq3BapIHJ5qr7nNury0fJQidb-nnkn2ZIxImMvN92CtiLwkZTmmzWelv9Lt8EDor2Q2YmKSDI6OoFTiNe8OZdDLLO5YATYA4-Bc1_y8qOcwOzq8-gzj4u__BwuLJLJFYe4e4plXgREYK6EbTXB872QCtz2aiSen0dpHPSdkfXncs#_ = _'有是没有access_token参数... – Nyxynyx 2012-02-17 22:20:22

回答

1

$ facebook-> getUser()使用cookie来获取用户。如果您使用CodeIgniter或另一个“吃”PHP自动分配的cookie的库,则需要在CI外部创建一个代理页面,以便将cookie重定向回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/ 

它会奇迹般地开始工作。

+0

无论如何阻止Codeigniter仅仅为了该控制器功能而自动吃掉cookie? – Nyxynyx 2012-02-17 20:04:31

+0

我可以只包含在http:// www.mydomain.com/facebook_pickup.php中,它可以包含:$ facebook = new Facebook(array( 'appId'=>'123', 'secret'=>'123' )); //查看是否有来自cookie的用户 $ user = $ facebook-> getUser();' 仍然可以从http://www.mydomain.com/login/facebook_connect访问$ facebook和$ user /第二次重定向后? – Nyxynyx 2012-02-17 20:13:33

2

一切似乎都正确。

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


编辑2:如果是一个cookie相关的问题。这里是一个图像显示,你可以使用萤火用一个cookie模块,轻松地跟踪您的Cookie:

enter image description here

所以,你可以检查正在生成的Cookie如何使用Facebook。


编辑3:好的。所以你使用CI和你的FB cookies被删除。也许是会话问题。这里是一个related answer,我解释了如何使用会话CI库替换,通常解决所有这些类型的痛苦问题。相信我,试试吧!

A.-这是:Codeigniter's Native session(有在底部的下载链接)

B.-,但由于它是你必须做一些黑客的老图书馆。您可以在library's forum

中检查这些简单的黑客c .-只需将此文件放在codeigniter的库目录中即可。

+0

是的,我使用Codeigniter! – Nyxynyx 2012-02-17 20:02:39

+0

:)我知道了!米兰Babuškov给出的答案似乎很巧妙。如果不行,我可以推荐你一个基于会话的解决方案。我会在这里... – 2012-02-17 20:05:30

+0

我很疑惑为什么Codeigniter会删除Facebook cookies?并且Facebook是在Facebook为用户验证我的websiste之后创建的cookie吗?还是PHP SDK设置了cookie? – Nyxynyx 2012-02-17 20:40:31

相关问题