簡體   English   中英

Facebook畫布應用程序“redirect_uri”在授權和身份驗證后突破iframe

[英]Facebook canvas app “redirect_uri” breaks out of iframe after authorization & authentication

我正在升級我現有的FB應用程序,並試圖獲得一個簡單的PHP iframe畫布應用程序來授權和驗證(以及使用SSL)。 沒看過這么多例子......

這就是我被困住的地方:在用戶授權應用程序之后,應用程序對用戶進行身份驗證(我能夠使用令牌OK進行圖形請求),redirect_uri發生,整個頁面刷新,留下Facebook,然后顯示我的“畫布URL”頁面(使用我服務器的域名)的內容,而不是Facebook上的iframed。

我目前這是一個粗略的兩步過程......

這是我的代碼在第一頁(index.php)上的樣子:

<?php
require('src/facebook.php');

$app_id = '123456789';
$app_secret = '1234secrets1234';
$canvas_page = "https://apps.facebook.com/123456789/";
$canvas_url = "https://myserver.com/apptest/";

$code = $_REQUEST['code'];

if(!$code){
$display= 'page';
$scope= 'manage_pages, offline_access, read_insights, publish_stream, user_about_me, user_likes, email'; 
$redirect_url = 'https://myserver.com/apptest/step2.php';
$oauth_url    = 'https://www.facebook.com/dialog/oauth?canvas=1&client_id='.$app_id.'&display='.$display.'&redirect_uri='.urlencode($redirect_url).'&scope='.$scope;
$config = array('appId'  => $app_id,'secret' => $app_secret,'cookie' => true,'domain' => true);
$facebook_client = new Facebook($config);

echo "<script type=\"text/javascript\">top.location.href = \"".$oauth_url."\";</script>";
}
?>

和第二頁(step2.php):

<?php
require('src/facebook.php');

$app_id = '123456789';
$app_secret = '1234secrets1234';
$canvas_page = "https://apps.facebook.com/123456789/";
$canvas_url = "https://myserver.com/apptest/";


if($_REQUEST['code']){
$code=$_REQUEST['code'];
$redirect_url = 'https://myserver.com/apptest/step2.php';
$link="https://graph.facebook.com/oauth/access_token?canvas=1&client_id=".$app_id."&redirect_uri=".urlencode($redirect_url)."&client_secret=".$app_secret."&code=".$code;
$string = file_get_contents($link);
$auth_token=substr($string, 13, 150);

$graph_url = "https://graph.facebook.com/me?access_token=".$auth_token;
$user = json_decode(file_get_contents($graph_url));
echo("Hello " . $user->name);
} 

同樣,一旦用戶授權了應用程序,並且應用程序已對用戶進行了身份驗證,則圖表調用將起作用。

有任何想法嗎?

導航到OAuth對話框時,網頁(不是您的應用所在的框架)會導航到OAuth網址。 要在身份驗證后返回Facebook iframe,您需要將OAuth重定向網址設置為canvas_page網址。 上面顯示的代碼在重定向時導航到myserver的URL,因此您的應用占用了整個頁面(因為您在導航到OAuth對話框時離開了Facebook iframe)。 canvas_url上的代碼需要確定是從授權(成功還是失敗)輸入,還是在驗證后使用有效的訪問令牌輸入。

此外,您的canvas_page網址似乎由facebook apps主機和您的應用程序ID組成。 它應該是facebook apps主機和您的應用程序名稱(重定向URL應該與應用程序開發者頁面上的“Canvas Page”URL相同)。

好吧,我確實得到了這個工作。 在應用程序>設置>基本我沒有設置名稱空間,所以它給我在Facebook上的應用程序的URL是這樣的: https//apps.facebook.com/123456789/現在與命名空間他們改變了它to: https//apps.facebook.com/myappname 這可能就是這樣。 我試着仔細按照這個頁面上的簡單PHP自動化演示: https//developers.facebook.com/docs/appsonfacebook/tutorial/它現在似乎工作正常。

謝謝您的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM