4

我正在 iFrame 中开发一个新的 Facebook Canvas 应用程序并尝试授权用户。新的 OAuth api 建议我重定向到以下内容以在我的应用程序中授权用户:

https://graph.facebook.com/oauth/authorize?client_id=...&redirect_uri= http://www.example.com/oauth_redirect

然而,这会产生一个奇怪的问题,即请求用户权限的完整 Facebook 页面在 iFrame 本身内呈现(即 Facebook 内的 Facebook)。有谁知道如何使用新的 OAuth API 解决这个问题,因为我不想开始使用旧的 REST API 方法。

4

6 回答 6

0

即使我有同样的问题,我也将其发布在 facebook 论坛上。版主告诉我,这是一个目前还没有解决方案的问题。看看这个线程 - http://forum.developers.facebook.com/viewtopic.php?id=56590

于 2010-04-30T06:13:08.740 回答
0

相反,我找到了解决此问题的方法,我在此处的博客文章中对此进行了概述。看看这个。

于 2010-05-03T21:15:34.117 回答
0

过去两天一直在努力解决这个问题,并在Facebook 开发者论坛上找到了解决此问题的方法。

于 2010-05-21T07:59:30.707 回答
0

还有另一种方法可以使用 oAuth v2,这在 facebook 文档中有所描述,但分为几页,所以不容易理解。

首先,您需要在应用程序的“高级参数”中激活“OAuth 2.0 for Canvas”标志。

然后,这是一个解释如何处理它的 PHP 示例:

function parse_signed_request($signed_request, $secret) {
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data
    $sig = base64_url_decode($encoded_sig);
    $data = json_decode(base64_url_decode($payload), true);

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
            error_log('Unknown algorithm. Expected HMAC-SHA256');
            return null;
    }

    // check sig
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
    if ($sig !== $expected_sig) {
            error_log('Bad Signed JSON signature!');
            return null;
    }

    return $data;
}

function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_', '+/'));
}

$data = parse_signed_request($_REQUEST["signed_request"], <your facebook app api secret>);

if (empty($data["user_id"]) && !isset($_REQUEST['redir'])) {
    // The user isn't authenticated
    $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" .
            <your facebook app id> . "&redirect_uri=" .
            urlencode('http://apps.facebook.com/<yourapp>/?redir=1');
    echo("<script> top.location.href='" . $auth_url . "'</script>");
    die;
}
// Here the user is authenticated
echo ("Welcome User: " . $data["user_id"]);
// And now you have the Graph API auth token in $data["oauth_token"],
// so you can use any graph api method
于 2011-01-12T09:55:56.820 回答
0

试试这篇文章http://novacoders.blogspot.com/2011/04/facebook-apps-oauth-20-authorization.html

如果您不使用任何 Web 服务器,则需要使用 Javascript SDK。FB.init() 返回所有必要的数据,如 access_token。

于 2011-04-07T14:41:20.777 回答
0

您不能在画布 iframe 中执行简单的重定向 302 或 301,因为这只会重定向 iframe 中的内容。Facebook 的建议是发送一小段 JavaScript 来设置top.location对话/oauth 页面。

<script>top.location='https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&scope=publish_actions';</script>.

clientid作为您的 AppId 并redirect_uri作为处理来自身份验证对话框页面的重定向的页面。

于 2012-07-09T02:04:57.113 回答