首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codeigniter 2.1.2和Facebook-PHP-SDK 3.1.1

Codeigniter 2.1.2和Facebook-PHP-SDK 3.1.1
EN

Stack Overflow用户
提问于 2012-07-18 08:02:58
回答 2查看 1.7K关注 0票数 2

我正在通过Codeigniter 2.1.2和Facebook-PHP-SDK 3.1.1开发一个简单的身份验证槽,但我不知道为什么它现在可以工作。

我已经将src文件夹(https://github.com/facebook/facebook-php-sdk/tree/master/src)中的所有文件下载到我的库中。

登录似乎正常,但是当用户被重定向回我的网站时,Facebook getUser()函数总是返回0!

代码语言:javascript
复制
<?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');
    }
}
EN

回答 2

Stack Overflow用户

发布于 2012-08-01 17:21:43

Facebook PHP SDK使用$_REQUEST变量,而CodeIgniter出于安全原因清除了$_REQUEST变量。

要解决此问题,可以在调用getUser()之前将$_GET的内容复制到$_REQUEST:

代码语言:javascript
复制
$_REQUEST += $_GET;
$this->facebook->getUser();

另一种解决方案是修改Facebook PHP SDK以使用$_GET而不是$_REQUEST。

希望这能有所帮助。

票数 9
EN

Stack Overflow用户

发布于 2012-07-18 18:04:50

您在site_url()函数中仅使用了函数名,这是不正确的。您必须指定控制器名称。

试试这个:

代码语言:javascript
复制
$this->facebook->getLoginUrl(array(
                'scope' => 'email',
                'redirect_uri' => site_url('bloompit/login')
            ));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11532551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档