在我的畫布頁中,我嘗試對用戶進行認證它http://developers.facebook.com/docs/guides/canvas/描述的方式,通過使用基本代碼(例如代碼developers.facebook.com):Facebook的帆布認證:沒有signed_request參數重定向後
<?php
$app_id = "YOUR_APP_ID";
$canvas_page = "YOUR_CANVAS_PAGE_URL";
$auth_url = "http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($canvas_page);
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
if (empty($data["user_id"])) {
echo("<script> top.location.href='" . $auth_url . "'</script>");
} else {
echo ("Welcome User: " . $data["user_id"]);
}
?>
問題是,用戶第一次授權我的畫布應用程序時,Facebook在重定向回參數時(如示例代碼中所述)不通過signed_request
參數,而是code
參數。第二次訪問應用程序時(已經確認權限),它按預期傳遞signed_request
參數。
爲什麼第一次通過code
參數?當Facebook通過code
/signed_request
參數時,文檔無法解釋。
我發現問題:對於$ canvas_page,我使用畫布URL(例如http://mysite.com/canvas/)而不是畫布*頁面* URL(例如http://apps.facebook.com/ MYAPP)。 –