Facebook PHP SDK - 用户未经过身份验证
我使用Facebook PHP SDK对用户进行身份验证。在使用PHP SDK生成LoginUrl
之后,用户单击该LoginUrl
将被重定向到Facebook页面以请求许可。点击Go to App
链接后,用户将被重定向回我的网站http://www.mydomain.com/login/facebook_connect
。Facebook 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;
$ 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/
它会奇迹般地开始工作。
无论如何阻止Codeigniter仅仅为了该控制器功能而自动吃掉cookie? – Nyxynyx 2012-02-17 20:04:31
我可以只包含在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
一切似乎都正确。
问题:
1.-我认为http://www.mydomain.com/包含所有脚本,对吧?
2.-你在使用codeigniter吗?或者一个基于codeigniter的CMS?在这种情况下,你可能会遇到一个会话问题(在CI中很常见)。检查它,我们继续...
编辑2:如果是一个cookie相关的问题。这里是一个图像显示,你可以使用萤火用一个cookie模块,轻松地跟踪您的Cookie:
所以,你可以检查正在生成的Cookie如何使用Facebook。
编辑3:好的。所以你使用CI和你的FB cookies被删除。也许是会话问题。这里是一个related answer,我解释了如何使用会话CI库替换,通常解决所有这些类型的痛苦问题。相信我,试试吧!
A.-这是:Codeigniter's Native session(有在底部的下载链接)
B.-,但由于它是你必须做一些黑客的老图书馆。您可以在library's forum
中检查这些简单的黑客c .-只需将此文件放在codeigniter的库目录中即可。
当facebook重定向回您的网站时,您是否检查完整的网址?应该有一个access_token参数。 – 2012-02-17 21:16:25
重定向现在工作正常,使用'redirect_uri'而不是'next'。 – Nyxynyx 2012-02-17 22:16:40
这是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