13

我正在尝试在我的项目中在 codeigniter 中实现 facebook 登录。

我正在使用 php sdk。

当我点击登录按钮时,它给了我一个错误:

The redirect_uri URL must be absolute

有什么问题,我该如何解决?

以下是 的内容view/home.php

 <?php if(!$fb_data['me']): ?>
  Please login with your FB account: 
  <a href="<?php echo $fb_data['loginUrl']; ?>">login</a>
  <?php else: ?>
  <img src="https://graph.facebook.com/<?php 
    echo $fb_data['uid']; ?>/picture" alt="" class="pic" />
  <p>Hi <?php echo $fb_data['me']['name']; ?>,<br />
    <a href="<?php 
    echo site_url('welcome/topsecret'); ?>">
    You can access the top secret page</a> or 
    <a href="<?php echo $fb_data['logoutUrl']; ?>">logout</a> </p>
  <?php endif; ?>

以下是以下内容:controler/home.php

class Home extends CI_Controller {

   function __construct()
    {
        parent::__construct();

        $this->load->model('Facebook_model');
    }

    function index(){
        $this->load->model("Concertos_model");
        $data['banners'] = $this->Concertos_model->get_banner_data();


       $fb_data = $this->session->userdata('fb_data'); // This array contains all the user FB information

        $data = array(
                    'fb_data' => $fb_data,
                    );

        $this->load->view('home', $data);   

    }

    function topsecret()
    {
        $fb_data = $this->session->userdata('fb_data');

        if((!$fb_data['uid']) or (!$fb_data['me']))
        {
            redirect('home');
        }
        else
        {
            $data = array(
                        'fb_data' => $fb_data,
                        );

            $this->load->view('home', $data);
        }
    }

}

内容model/Facebook_model.php::

<?php
class Facebook_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();

        $config = array(
                        'appId'  => 'xxxxxxxxxxxxxxxxxxx',
                        'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxx',
                        'fileUpload' => true, // Indicates if the CURL based @ syntax for file uploads is enabled.
                        );

        $this->load->library('Facebook', $config);

        $user = $this->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.
        $profile = null;
        if($user)
        {
            try {
                // Proceed knowing you have a logged in user who's authenticated.
                $profile = $this->facebook->api('/me?fields=id,name,link,email');
            } catch (FacebookApiException $e) {
                error_log($e);
                $user = null;
            }
        }

        $fb_data = array(
                        'me' => $profile,
                        'uid' => $user,
                        'loginUrl' => $this->facebook->getLoginUrl(
                            array(
                                'scope' => 'email,user_birthday,publish_stream', // app permissions
                                'redirect_uri' => 'home' // URL where you want to redirect your users after a successful login
                            )
                        ),
                        'logoutUrl' => $this->facebook->getLogoutUrl(),
                    );

        $this->session->set_userdata('fb_data', $fb_data);
    }
}

为什么 facebook 会返回该消息,我该如何解决?

4

1 回答 1

19
'redirect_uri' => 'home' // URL where you want to redirect your users after a successful login

您必须提供完整的 URL(从 开始http://),而不是 CI 页面别名。site_url('home')改为使用

于 2013-06-07T21:11:38.730 回答