Facebook PHP SDK: как автоматически отображать диалог входа в систему?

Мой код не может отображать диалоговое окно разрешений, когда пользователь подключается к моему приложению Facebook. Вместо страницы входа я получил ошибку 404.

Мой код:

require 'src/facebook.php';
require './config.php';

$facebook = new Facebook(array(
  'appId'  => $fb_app_id,
  'secret' => $fb_secret,
  'cookie' => true,
));

$userData = null;
$user = $facebook->getUser();

if ($user) {
    try {
        $userData = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
    }
} else {
    $loginUrl = $facebook->getLoginUrl(array(
    'scope' => 'publish_stream',
));
}


    <div id="loginWrapper">
<?php if ($user): ?>
      <a href="<?php echo $logoutUrl; ?>">Logout</a>
        <?php else: ?>
        <a href="<?php echo $loginUrl; ?>">Login with Facebook</a>
    <?php endif ?>
    </div>

Я также попытался напрямую указать персонализированный URL-адрес (например, ниже), и я получил ту же ошибку 404.

$loginUrl = "http://www.facebook.com/dialog/oauth?client_id=".$fb_app_id."&redirect_uri=".$fb_app_url."&scope=publish_stream";

ОБНОВЛЕНИЕ 1:

В противном случае, когда я пытаюсь войти напрямую через сервер (от http://mydomain/application/index.php), я получил перенаправление на веб-сайт Facebook по указанному ниже URL-адресу и получил следующее сообщение об ошибке:

https://www.facebook.com/dialog/oauth?client_id=xxxxxxxxxxxxxx&redirect_uri=http://apps.facebook.com/myapplication&state=f8cd945d8a9aefcd0b439fecd8515a68&canvas=1&fbconnect=0&scope=publish_stream

http://img851.imageshack.us/img851/661/screenshot20111216at151.png

ОБНОВЛЕНИЕ 2:

Вот моя конфигурация приложения:

И сообщение, которое я получил, когда пытаюсь получить доступ напрямую по ссылке приложения: apps.facebook.com/myapplication/ без регистрации

http://img854.imageshack.us/img854/7721/screenshot20111216at173.png

Буду признателен за любую помощь.


person Julien    schedule 16.12.2011    source источник
comment
Если оно просто не работает, когда вы не вошли в систему, может быть, ваше приложение работает в режиме песочницы? Вы можете проверить, включена ли она в дополнительных настройках вашего приложения.   -  person Björn Kaiser    schedule 16.12.2011
comment
Большое спасибо. Это решает мою проблему :-D   -  person Julien    schedule 16.12.2011


Ответы (2)


Разрешение status_update, которое вы используете в области для loginUrl, не является допустимым разрешением. Ознакомьтесь с документами.

Это может быть вашей проблемой.

Также помните, что если пользователь уже авторизовал ваше приложение, он больше не увидит диалоговое окно разрешения при последующих входах в систему. Они будут приняты только через процедуру входа в facebook.

РЕДАКТИРОВАТЬ:

Взгляните на изображение, которое я прикрепил, facebook будет перенаправлен на URL-адрес, указанный в поле URL-адрес сайта в настройках приложения:

введите здесь описание изображения

person ghstcode    schedule 16.12.2011
comment
Спасибо вам за совет. Но это не решило мою проблему. Facebook по-прежнему возвращает мне ошибку, даже если я использую только scope=publish_stream. - person Julien; 16.12.2011
comment
Ах хорошо. Судя по вашему обновлению, это может быть связано с тем, как настроено ваше приложение FB. - person ghstcode; 16.12.2011
comment
Я полагаю, вы могли бы сделать следующее: вместо перенаправления на apps.facebook.com/myapplication из loginUrl , перенаправьте обратно на свой личный домен mydomain/application/my_redirect.php, а внутри my_redirect вы можете перенаправить обратно на URL-адрес приложения FB после успешного входа в систему. Я не думаю, что это предназначено для такого использования, но я уверен, что это сработает. - person ghstcode; 16.12.2011
comment
Я понимаю манипуляцию, но на самом деле проблема в том, что пользователь может получить доступ к моему приложению только с URL-адреса apps.facebook.com/myapplication. Он не должен проходить через mydomain/application/... - person Julien; 16.12.2011
comment
Я пытался изменить ссылку на сайт, и это все еще не работает. Я, кстати, обновил свой пост. - person Julien; 16.12.2011

Что касается обновления вашего сообщения: перейдите в приложение для разработчиков и выберите Приложение, для которого вы получаете эту ошибку. Нажмите «Изменить настройки» и введите домен, на котором размещено ваше приложение или на который вы перенаправляете, в поле «Домен приложения». Теперь просто сохраните, и он должен работать.

Редактировать (решение из комментария выше): Если оно просто не работает, когда вы не вошли в систему, возможно, ваше приложение работает в режиме песочницы? Вы можете проверить, включена ли она в «Дополнительных настройках» вашего приложения.

person Björn Kaiser    schedule 16.12.2011
comment
У меня все та же проблема: запрошенная вами страница не найдена. Возможно, вы нажали ссылку с истекшим сроком действия или опечатались в адресе. Некоторые веб-адреса чувствительны к регистру. Я добавил домен, а именно: php.quotations.s155.eatj.com - person Julien; 16.12.2011
comment
Какой домен вы добавили в список доменов приложений? Домен вашего redirect_uri должен быть в этом списке (в данном случае facebook.com) - person Björn Kaiser; 16.12.2011
comment
Я добавил apps.facebook.com и facebook.com и получил те же ошибки. - person Julien; 16.12.2011
comment
В вашем примере кода вы использовали «область действия», но ссылка, на которую я перенаправляюсь, использует ключ «perms», который больше недействителен. - person Björn Kaiser; 16.12.2011
comment
Я тоже это заметил. Я не знаю, почему API возвращает мне разрешения вместо области действия. - person Julien; 16.12.2011