我正在通过Codeigniter 2.1.2和Facebook-PHP-SDK 3.1.1开发一个简单的身份验证槽,但我不知道为什么它现在可以工作。
我已经将src文件夹(https://github.com/facebook/facebook-php-sdk/tree/master/src)中的所有文件下载到我的库中。
登录似乎正常,但是当用户被重定向回我的网站时,Facebook getUser()函数总是返回0!
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Bloompit extends CI_Controller
{
public $user;
public function __construct()
{
parent::__construct();
$this->load->helper('url');
$this->load->library('session');
$this->load->library('facebook', array(
'appId' => '149275358530064',
'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxx'
));
$this->load->model('bloompit_model');
$this->user = $this->session->userdata('user');
}
public function index()
{
$data['title'] = 'Bloompit';
$data['page'] = 'home';
$this->load->view('view', $data);
}
public function login()
{
if ($this->user) {
redirect(site_url(), 'location');
} elseif ($this->facebook->getUser()) {
try {
$facebook_user = $this->facebook->api('/me');
$this->session->set_userdata('user', array(
'name' => $facebook_user['name']
));
} catch (FacebookApiException $e) {
log_message('error', $e);
redirect($this->facebook->getLoginUrl(array(
'scope' => 'email',
'redirect_uri' => site_url('login')
)), 'location');
}
} else {
$data['facebook_login_url'] = $this->facebook->getLoginUrl(array(
'scope' => 'email',
'redirect_uri' => site_url('login')
));
$data['title'] = 'Entrar';
$data['page'] = 'login';
$this->load->view('view', $data);
}
}
public function logout() {
session_destroy();
redirect($this->facebook->getLogoutUrl(array(
'next' => site_url()
)), 'location');
}
}发布于 2012-08-01 17:21:43
Facebook PHP SDK使用$_REQUEST变量,而CodeIgniter出于安全原因清除了$_REQUEST变量。
要解决此问题,可以在调用getUser()之前将$_GET的内容复制到$_REQUEST:
$_REQUEST += $_GET;
$this->facebook->getUser();另一种解决方案是修改Facebook PHP SDK以使用$_GET而不是$_REQUEST。
希望这能有所帮助。
发布于 2012-07-18 18:04:50
您在site_url()函数中仅使用了函数名,这是不正确的。您必须指定控制器名称。
试试这个:
$this->facebook->getLoginUrl(array(
'scope' => 'email',
'redirect_uri' => site_url('bloompit/login')
));https://stackoverflow.com/questions/11532551
复制相似问题