Facebook PHP SDK - пользователь не аутентифицирован - PullRequest
1 голос
/ 17 февраля 2012

Я использую Facebook PHP SDK для аутентификации пользователя. После генерации LoginUrl с использованием PHP SDK пользователь, щелкнув по этому LoginUrl, будет перенаправлен на страницу Facebook с запросом разрешения. После нажатия на ссылку Go to App пользователь перенаправляется обратно на мой сайт http://www.mydomain.com/login/facebook_connect.

Проблема: После «аутентификации» в Facebook скрипт PHP на http://www.mydomain.com/login/facebook_connect не может определить, что пользователь вошел в систему через Facebook. На данный момент $user = $facebook->getUser(); равно 0.

Я сделал что-то не так? Спасибо!

PHP-код для страницы, которая генерирует LoginUrl

require 'libs/fb-php-sdk/facebook.php';

// Create our Application instance
$facebook = new Facebook(array(
  'appId'  => '123',
  'secret' => '123'
));

// Get User ID
$user = $facebook->getUser();

// Get Login URL
$loginUrl = $facebook->getLoginUrl(array(
    "scope" => "email,user_education_history,user_work_history",
    "redirect_uri" => "http://www.mydomain.com/login/facebook_connect/"
));

$data['fb_login_url'] = $loginUrl;

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

Код PHP для пользователя страницы перенаправляется после аутентификации Facebook

*http://www.mydomain.com/login/facebook_connect/*

require 'libs/fb-php-sdk/facebook.php';

    $facebook = new Facebook(array(
        'appId'  => '123',
        'secret' => '123',
    ));

    // See if there is a user from a cookie
    $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;
      }
    }

    print_r($user_profile);
    echo $user;

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Все кажется правильным.

Вопросы:
1.- Я предположил, что http://www.mydomain.com/ содержит все ваши скрипты, верно?
2.- Вы используете codeigniter?Или CMS на основе кодовых символов?В этом случае, возможно, у вас есть проблемы с сеансом (очень часто встречается в CI).Проверьте это, и мы продолжим ...


РЕДАКТИРОВАТЬ 2: В случае проблемы, связанной с cookie.Вот изображение, показывающее, как вы можете использовать firebug с модулем cookie для простого отслеживания ваших файлов cookie:

enter image description here

Таким образом, вы можете проверить, как создаются файлы cookie facebook.1016 *

РЕДАКТИРОВАТЬ 3: ОК.Таким образом, вы используете CI, и ваши FB куки удаляются.Может быть, это проблема сеанса.Вот связанный ответ , где я объясняю, как использовать замену библиотеки CI сеанса, которая обычно решает все эти болезненные проблемы.Поверьте, попробуйте!

a.- Вот оно: Собственная сессия Codeigniter (внизу есть ссылка для скачивания)

b.- НОИз-за того, что это старая библиотека, вы ДОЛЖНЫ сделать несколько хаков.Вы можете проверить эти простые хаки на форуме библиотеки

c.- Просто поместите этот файл в каталог библиотеки codeigniter.

1 голос
/ 17 февраля 2012

$ facebook-> getUser () использует куки для получения пользователя. Если вы используете CodeIgniter или другую библиотеку, которая «ест» файлы cookie, которые PHP назначает автоматически, вам нужно создать страницу прокси вне CI, которая будет использовать cookie для перенаправления обратно в CI.

Другими словами, возьмите код, который у вас есть в

http://www.mydomain.com/login/facebook_connect/

и создайте копию в обычном файле PHP:

http://www.mydomain.com/facebook_pickup.php

не выводите ничего из скрипта (удалите print_r), просто перенаправьте на

http://www.mydomain.com/login/facebook_connect/

и он волшебным образом начнет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...