我正在尝试将 Facebook PHP SDK 与 CodeIgniter 结合使用,以允许用户使用 Facebook Connect 登录我的网站。无论我尝试什么,getUser() 总是返回 0,即使在(显然)通过 Facebook 成功验证之后也是如此。
CodeIgniter 版本:2.1.3
Facebook PHP SDK 版本:3.2.2
我在 application/config 文件夹中创建了一个配置文件 facebook.php,我正在通过 CodeIgniter 的 $this->load->library(...) 方法加载 Facebook PHP SDK。该库确实正在加载,我可以成功调用许多 get...() 方法,包括 getAccessToken()、getAppId() 和 getAppSecret(),所有这些都返回它们的预期值。
这是我的登录控制器的精简版本:(请注意,我还提供了另一种通过电子邮件登录的方法,因此 CodeIgniter 会话代码遍布各处)
class Login extends CI_Controller {
public function __construct()
{
//Call parent constructor
parent::__construct();
//Magic sauce - not sure if this is required but a lot of other people
//are recommending it to be included (happy to remove it if necessary)
parse_str($_SERVER['QUERY_STRING'], $_REQUEST);
//Load facebook library
$facebook_config = $this->load->config('facebook');
$this->load->library('facebook', $facebook_config);
}
public function index()
{
//Check if user is logged in
$user_id = $this->session->userdata('user_id');
$is_logged_in = $this->session->userdata('is_logged_in');
if(($is_logged_in) && ($user_id != 0)) {
//Logged in - redirect to game
redirect('game');
} else {
//Not logged in
//Get facebook login url
$facebook_data = array(
'redirect_uri' => 'hxxp://xxxxxxxx.com/facebook_login/',
'scope' => 'email'
);
$data['facebook_login_url'] = $this->facebook->getLoginUrl($facebook_data);
//Redirect to login form
$this->load->view('login/login_form', $data);
}
}
public function facebook_login()
{
//Always returns 0!! Even after authenticating via facebook!
$facebook_user_id = $this->facebook->getUser();
if ($facebook_user_id) {
try {
$user_profile = $this->facebook->api('/me');
print_r($user_profile);
} catch (FacebookApiException $e) {
echo $e->getMessage();
}
} else {
echo "Could not log in with Facebook";
}
}
}
精简后的视图(login_form.php)如下:
<html>
<head>
<title>Facebook Connect Test</title>
</head>
<body>
<a href='<? echo $facebook_login_url; ?>'>Login with Facebook</a>
</body>
</html>
我有一条将 hxxp://xxxxxxxx.com/facebook_login 重定向到 login/facebook_login 方法的路由,该方法正在运行。
我在实时开发服务器上运行此代码。
我目前的流程如下:
- 加载 hxxp://xxxxxxxx.com/(到登录控制器的路由,加载 login_form 视图)
- 点击“用 Facebook 登录”链接
- Facebook要求我登录(我这样做)
- Facebook 要求我授予我的应用程序的权限(我这样做了)
- Facebook 将我重定向到 redirect_uri 参数中指定的 URL,该 URL 与应用设置页面上的相同
这就是一切都出错的地方。$this->facebook->getUser() 方法总是返回 0,即使在身份验证之后也是如此。
我一直在搜索 Facebook 开发人员文档以及互联网上我能想到的其他任何地方,试图找到这个问题的答案。我遇到过许多类似的帖子,并尝试应用建议的解决方案,但无济于事。
我究竟做错了什么?