2012-11-12 67 views
1

我目前正在開發一個使用php sdk和js sdk的facebook應用程序。 (我需要他們兩個)Facebook應用程序:不重定向到iFrame中的OAuth

當用戶還沒有授權應用程序並加載畫布頁面(https://apps.facebook.com/app_name/)時,沒有任何反應,他只是得到一個空白頁面頂部的臉書欄。 但是,如果他加載應用程序的直接網址(https://my_app.mydomain.com),它可以正常工作,並且他被重定向到OAuth對話框。如果他授權應用程序,那麼他將被重定向到https://apps.facebook.com/app_name/並且iframe正確加載。

如果用戶已經授權應用程序,則兩個鏈接都可用(https://apps.facebook.com/app_name/和https://my_app.mydomain.com)。

這裏是我的驗證碼:

<?php 

require 'php-sdk/facebook.php'; 

$facebook = new Facebook(array(
    'appId' => '327991330620101', 
    'secret' => '79asecretcc4300', 
    'cookie' => true 
)); 

$user = $facebook->getUser(); 



if ($user) { 
    try { 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    $user = null; 
    } 
} 

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

    $params = array(
     'scope' => 'publish_stream', 
     'redirect_uri' => 'https://apps.facebook.com/quiet_quies/' 
    ); 

    $loginUrl = $facebook->getLoginUrl($params); 
    header('Location: ' . $loginUrl); 
} 

有誰對這個想法?這真的讓我發瘋... 感謝您的幫助。

+1

您__can不能將auth對話框加載到任何種類的(i)框架中。使用JavaScript打破它的登錄(腳本元素與'top.location.href = {login_url}'),或使用客戶端登錄,而不是使用JS SDK。 – CBroe

+0

但是,如果用戶沒有授權該應用程序,我的頁面根本就沒有加載,所以我不能在其中放入任何js ... – Linwe

+0

當然,您的應用程序無論如何都會被加載 - 但這取決於您在這種情況下做了什麼,如果事情順利或沒有。如果您仍在使用標題,如腳本中所示,那麼只有帶有FB徽標的頁面纔會加載到框架中。 – CBroe

回答

3

是,@CBroe是正確的,在你的php代碼嘗試更換header('Location: ' . $loginUrl);符合

echo "<script language=javascript>top.location.href ='".$loginUrl."'</script>"; 

它應該工作即可。

相關問題