Использование Facebook PHP-SDK 3.x для регистрации / входа пользователя с помощью Codeigniter 2.1.0

Переходите через API Facebook, и я немного смущен правильно. Я хочу, чтобы пользователи пропустили регистрацию или автоматически зарегистрировали их, если они вошли в Facebook. Поэтому, если они подписываются в Facebook, я собираю их идентификатор, электронную почту и создаю запись в моей пользовательской таблице.

Если идентификатор уже существует в пользовательской таблице, они пропускают автоматическую регистрацию и переходят непосредственно на страницу участников. Это мой код до сих пор (взято из примера PHP PHP SDK). Когда я запускаю скрипт регистрации, страница отображается как пустая, я не перенаправляюсь.

РЕДАКТИРОВАТЬ: кажется, что сбой сразу после требования, если я использую следующий код, «тест» никогда не печатается.

EDIT: я использую Codeigniter, и этот скрипт является частью контроллера, вызвавшего бы проблему с требованием?

require 'http://localhost/facebook-php-sdk-6c82b3f/src/facebook.php'; echo "test"; 

 public function signup() { require 'http://localhost/facebook-php-sdk-6c82b3f/src/facebook.php'; // Create our Application instance (replace this with your appId and secret). $facebook = new Facebook(array( 'appId' => 'xxxxxxxxxxxxxxx', 'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxx', )); // Get User ID $user = $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. if ($user) { try { // Proceed knowing you have a logged in user who's authenticated. $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } // Login or logout url will be needed depending on current user state. if ($user) { $logoutUrl = $facebook->getLogoutUrl(); } else { $loginUrl = $facebook->getLoginUrl(array('scope' => 'email')); redirect($loginUrl); } print_r($user_profile); $this->load->model("user_model"); $privileges = 1; $loginLocation = ip2long($_SERVER['REMOTE_ADDR']); $active = 1; $this->user_model->add_user($user_profile->id, $user_profile->name, $user_profile->email, $loginLocation, $privileges, $active); } 

Я предлагаю вам ознакомиться с документацией по инфраструктуре. Добавление библиотеки в Codeingiter – непростая задача. И библиотека Facebook не является исключением.

Вот быстрая интеграция, которую я только что придумал:

1. создать файл конфигурации: application/config/facebook.php

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); $config['appId'] = 'app_id'; $config['secret'] = 'app_secret'; 

2. Установите файлы sdk в application/libraries/ библиотеки папки application/libraries/ и переименуйте файл facebook.php в Facebook.php и замените тег php следующим:

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

3.В вашем контроллере загрузите файл конфигурации, а затем загрузите библиотеку Facebook:

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Welcome extends CI_Controller { public function __construct() { parent::__construct(); // Your own constructor code $CI = & get_instance(); $CI->config->load("facebook",TRUE); $config = $CI->config->item('facebook'); $this->load->library('facebook', $config); } public function index() { $user = $this->facebook->getUser(); if($user) { try { $user_info = $this->facebook->api('/me'); echo '<pre>'.htmlspecialchars(print_r($user_info, true)).'</pre>'; } catch(FacebookApiException $e) { echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>'; $user = null; } } else { echo "<a href=\"{$this->facebook->getLoginUrl()}\">Login using Facebook</a>"; } } } 

Теперь в методе конструктора вы только что инициализировали библиотеку Facebook (sdk), и к ней можно получить доступ, используя: $this->facebook .

Заметки:

  • Вы всегда можете использовать существующую библиотеку, а просто google it
  • Общей практикой является расширение основного класса контроллера и добавление туда библиотеки библиотеки Facebook.
  • Или создайте другую библиотеку, расширьте библиотеку Facebook, загрузите там конфигурационный файл и затем загрузите новую библиотеку.

Получив $user , проверьте параметры сеанса с помощью print_r($_SESSION) . После этого проверьте некоторые переменные if(isset($_SESSION['some session var'])) . Если это условие истинно, перейдите на главную страницу с header("location:main.php"); exit; header("location:main.php"); exit;

Вы можете попробовать использовать мой расширение http://github.com/deth4uall/Facebook-Ignited, он настроен для работы с Facebook. Просто обновите файл конфигурации, и он позволит вам делать то, что вам нужно, а также некоторые дополнительные методы, которые я добавил сам.

не знаю почему, но он всегда работает по этой строке:

echo "<a href=\"{$this->facebook->getLoginUrl()}\">Login using Facebook</a>";

Это сообщение об ошибке:

не удалось подключиться к хосту

Но это сработало.