PHP SDK - проблема с перенаправлением после запроса разрешения пользователя - PullRequest
0 голосов
/ 10 августа 2011

У меня есть приложение, которое находится на вкладке фан-страницы Facebook.

Когда пользователь получает доступ к вкладке этой страницы, я запрашиваю у него некоторые разрешения.

Моя проблема в том, что когда пользователь принимает разрешения, он перенаправляется на http://apps.facebook.com/, а не на вкладку страницы.

$my_url = "https://apps.facebook.com/<my_app_name>/";

Если я изменю значение my_url на http://www.facebook.com/pages/,, тогда пользователь будет в бесконечном цикле.

Мой код:

 if (isset($_REQUEST["code"])) {
  $code = $_REQUEST["code"];
 }
 if(empty($code)) {
  // Get permission from the user to manage their Page.
  $dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
    . $app_id . "&redirect_uri=" . urlencode($my_url)
    . "&scope=read_stream";
  echo('<script>top.location.href="' . $dialog_url . '";</script>');
 } else {
 //my code
 }

Спасибо.

1 Ответ

0 голосов
/ 10 августа 2011

Это связано с тем, что переменная code никогда не передается на содержимое вкладки iFrame через URL-адрес страницы вентилятора / вкладки приложения (если вы используете URL-адрес вкладки приложения, никакие дополнительные параметры не передаются в URL-адрес iFrame). Таким образом, следуя примеру кода выше, перенаправление JavaScript в диалог аутентификации всегда будет передаваться клиентскому браузеру.

Вы должны использовать последнюю версию PHP SDK (v3.1.1) с JavaScript SDK для аутентификации: http://developers.facebook.com/blog/post/534/

Пример кода из поста выше:

<code>require 'php-sdk/src/facebook.php';

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

// See if there is a user from a cookie
$user = $facebook->getUser();

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'
'; $ user = null; } } ?> <! DOCTYPE html> <? php if ($ user_profile) {?> Ваш профиль пользователя
            
        <?php print htmlspecialchars(print_r($user_profile, true)) ?>
      
<? php} else {?> <Фб: войти кнопки> </ FB: войти кнопки> <? php}?>
window.fbAsyncInit = function () { FB.init ({ appId: '<? php echo $ facebook-> getAppID ()?>', cookie: правда, xfbml: true, oauth: правда }); FB.Event.subscribe ('auth.login', function (response) { window.location.reload (); }); FB.Event.subscribe ('auth.logout', function (response) { window.location.reload (); }); }; (function () { var e = document.createElement ('script'); e.async = true; e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; document.getElementById ( 'FB-корень') AppendChild (е). } ());
...