2

Codeigniter 2.1.2 と Facebook-PHP-SDK 3.1.1 を使用して単純な認証を開発していますが、なぜそれが機能しているのかわかりません。

src フォルダー (https://github.com/facebook/facebook-php-sdk/tree/master/src) からすべてのファイルをライブラリにダウンロードしました。

ログインは機能しているようですが、ユーザーが私の Web サイトにリダイレクトされると、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');
    }
}
4

2 に答える 2

9

Facebook PHP SDK は $_REQUEST 変数を使用しますが、CodeIgniter はセキュリティ上の理由から $_REQUEST 変数を消去します。

これを回避するには、getUser() を呼び出す前に $_GET の内容を $_REQUEST にコピーします。

$_REQUEST += $_GET;
$this->facebook->getUser();

別の解決策として、Facebook PHP SDK を変更して、$_REQUEST の代わりに $_GET を使用することもできます。

お役に立てれば。

于 2012-08-01T09:21:42.640 に答える
0

site_url() 関数で関数名のみを使用していますが、これは正しくありません。コントローラー名を指定する必要があります。

これを試してください:

$this->facebook->getLoginUrl(array(
                'scope' => 'email',
                'redirect_uri' => site_url('bloompit/login')
            ));
于 2012-07-18T10:04:50.453 に答える