Диалоговият прозорец за удостоверяване на Facebook не се показва в раздела на страницата

Диалоговият прозорец за удостоверяване на Facebook няма да се покаже, когато преглеждате приложението в раздел на страница (iframe). Въпреки това работи добре, когато преглеждате приложението външно.

Настройките на приложението ми във Facebook са:

Site URL: http://domain.com/test
Canvas URL: http://domain.com/test/
Secure Canvas URL: https://domain.com/test/
Page Tab URL: http://domain.com/test/
Secure Page Tab URL: https://domain.com/test/

Добавих приложението към раздела на страницата ny чрез връзката: https://www.facebook.com/dialog/pagetab?app_id=[MY_APP_ID]&next=https://domain.com/test/

Използвам php sdk. И моят код в //domain.com/test/index.php изглежда така:

<?php
require 'facebook-php-sdk/src/facebook.php';

$facebook = new Facebook(array(
   'appId'  => '[MY_APP_ID]',
   'secret' => '[MY_APP_SECRET]',
   ));

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

if ($user) {
   $logoutUrl = $facebook->getLogoutUrl();
} else {
   $loginUrl = $facebook->getLoginUrl();
}

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;
   }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Facebook test</title>
</head>

<body>
<p>
<?php if($user) : ?>
   <a href="/bg<?php echo $logoutUrl;?>">Logout</a>
<?php else: ?>
   <a href="/bg<?php echo $loginUrl;?>">Login</a>
<?php endif; ?>
</p>
</body>
</html>

Ще съм благодарен за всяка помощ!!


person dannepanne    schedule 31.05.2012    source източник


Отговори (2)


Не можете да използвате диалоговия прозорец за удостоверяване в iframe (защо? вижте тук: http://facebook.stackoverflow.com/a/10831018/1427878). Добавете target="_blank" към връзките си и трябва да работи. Или просто вградете JavaScript SDK и използвайте FB.login, ако искате изскачащ прозорец без допълнителни разходи.

person CBroe    schedule 31.05.2012
comment
Благодаря много за вашето решение! прекрасно! - person dannepanne; 31.05.2012
comment
Упс, обаче не работи във Firefox. Показва се диалоговият прозорец за удостоверяване, но добавянето на _blank няма да презареди страницата по правилния начин във Firefox. Опитах също да използвам JS SDK, но презареждането на страницата с window.location.reload() след упълномощаване ми дава За да покаже тази страница, Firefox трябва да изпрати информация, която ще повтори всяко действие... - съобщение и без правилно презареждане. - person dannepanne; 01.06.2012
comment
Facebook извиква вашето приложение чрез POST, когато го зарежда в iframe, така че съобщението е нормално. Трябва ли да презаредите страницата си, когато потребителят е упълномощил приложението ви? Ако е така, тогава може би просто добавете действителното времево клеймо (JS Date обект) към location.href, което го прави „нов” ресурс за вашия браузър. - person CBroe; 01.06.2012
comment
В крайна сметка получих нещо подобно: <?php $server = $_SERVER["SERVER_NAME"]; $uri = $_SERVER["REQUEST_URI"]; ?> window.location.href = '//<?php echo $server . $uri ?>';Не е красиво, но работи. Можете ли да ми дадете пример за код с вашето времево клеймо? - person dannepanne; 04.06.2012

Опитайте да направите JS функция, която променя родителския URL адрес на iframe

function RedirectTo(installURL){
     window.top.location.href = installURL;
}

и извикайте тази функция при събитието onClick на текста за влизане

<?php else: ?>
   <a href="/bg#" onclick='RedirectTo("<?php echo $loginUrl;?>")'>Login</a>
<?php endif; ?>

Уверете се, че RedirectURI на променливата $loginUrl е URL адресът на вашето приложение

След това ще трябва да промените тези настройки в приложението си във Facebook (https://developers.facebook.com/apps)

Домейни на приложения: facebook.com

Уебсайт с влизане във Facebook: URL адресът на вашето приложение във Facebook (т.е.: https://www.facebook.com/{FanPageUsername}?sk=app_{appID})

person miguelglz    schedule 03.06.2012
comment
Благодаря, това също е интересно решение. ще го пробвам. - person dannepanne; 04.06.2012