Я пытаюсь реализовать логин facebook в своем проекте в кодеигниторе.
Когда я нажимаю кнопку входа в систему, это дает мне ошибку:
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 возвращает это сообщение и как его исправить?
'redirect_uri' => 'home' // URL where you want to redirect your users after a successful login
Вы должны указать полный URL (начиная с http://
), а не псевдоним страницы CI. site_url('home')
используйте site_url('home')