Использование Facebook PHP-SDK 3.x для регистрации / входа пользователя с Codeigniter 2.1.0 - PullRequest
5 голосов
/ 26 февраля 2012

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

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

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

РЕДАКТИРОВАТЬ: я использую Codeigniter и этот сценарий является частью контроллера, не вызовет ли это проблему с require?

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);

    }

Ответы [ 4 ]

12 голосов
/ 26 февраля 2012

Предлагаю вам прочитать фреймворк Документация .Добавление библиотеки в CodeIgniter не трудная задача.И библиотека 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/ и переименуйте файл facebook.php в Facebook.php и замените тег php следующим образом:

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

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

<code><?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)).'
';} catch (FacebookApiException $ e) {echo '
'.htmlspecialchars(print_r($e, true)).'
';$ user = null;}} else {echo " facebook-> getLoginUrl ()} \"> Войдите в систему с помощью Facebook";}}}

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

Примечания:

  • Вы всегда можете использовать существующую библиотеку, просто googleit
  • Обычной практикой является расширение базового класса Controller и добавление туда инициализации библиотеки Facebook.
  • Или создание другой библиотеки, расширение библиотеки Facebook, загрузка туда файла конфигурации изатем автоматически загрузите эту новую библиотеку.
0 голосов
/ 18 февраля 2013

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

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

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

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

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

0 голосов
/ 27 февраля 2012

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

0 голосов
/ 26 февраля 2012

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

...