0

Диалог Facebook Auth не отображается при просмотре приложения на вкладке страницы (iframe). Он отлично работает при просмотре внешнего приложения.Диалоговое окно Facebook не отображается на вкладке страницы

Мои настройки приложения 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/ 

Я добавил приложение к закладке страницы пу по ссылке: 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="<?php echo $logoutUrl;?>">Logout</a> 
<?php else: ?> 
    <a href="<?php echo $loginUrl;?>">Login</a> 
<?php endif; ?> 
</p> 
</body> 
</html> 

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

ответ

2

Вы не можете использовать диалог auth в iframe (почему? См. Здесь: http://facebook.stackoverflow.com/a/10831018/1427878). Добавьте target = "_ blank" в свои ссылки, и он должен работать. Или просто встройте JavaScript SDK & в использование FB.login, если вы хотите всплывающее окно без дополнительных расходов.

+0

Благодарности много для вашего решения! Прекрасный! – dannepanne

+0

Упс, однако, не работает в Firefox. Появится диалог auth, но добавление «_blank» не будет правильно загружать страницу в Firefox. Также попробовали использовать JS SDK, но перезагрузив страницу с помощью window.location.reload() после авторизации, я даю мне «Чтобы отобразить эту страницу, Firefox должен отправить информацию, которая будет повторять любое действие ...» - сообщение и надлежащая перезагрузка , – dannepanne

+0

Facebook вызывает ваше приложение через POST при загрузке его в iframe, поэтому сообщение является нормальным. У вас есть *, чтобы перезагрузить страницу, когда пользователь разрешил ваше приложение? Если это так, то, возможно, просто добавьте фактическую метку времени (объект JS Date) в location.href, что делает ее «новым» источником вашего браузера. – CBroe

2

Попробуйте сделать функцию JS, изменяющие IFrame без родителя URL-адрес

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

и вызывать эту функцию на событие OnClick Логина текста

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

Убедитесь, что RedirectURI в $ loginUrl вар является URL-адресом вашего приложения

Затем вам нужно будет установить эти настройки в своем приложении facebook (https://developers.facebook.com/apps)

App Домены: facebook.com

Сайт с использованием Facebook Вход: ваш facebook приложение URL (то есть: https://www.facebook.com/{FanPageUsername} ск = app_ {APPID})

+0

Спасибо, это тоже интересное решение. Я попробую. – dannepanne