我正在使用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
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 :(得分:2)
一切似乎都是正确的。
问题:
1.-我认为http://www.mydomain.com/包含你的所有剧本,对吧?
你在使用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的库目录中即可。
答案 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/
它会神奇地开始工作。