我正在iFrame中开发一个新的Facebook Canvas应用程序并尝试授权用户。新的OAuth api建议我重定向到以下内容以在我的应用中授权用户:
https://graph.facebook.com/oauth/authorize? CLIENT_ID = ...&安培; REDIRECT_URI = http://www.example.com/oauth_redirect
然而,这会产生一个奇怪的问题,即在iFrame本身(即Facebook内的Facebook)中呈现请求来自用户的权限的完整Facebook页面。有没有人知道如何使用新的OAuth API解决这个问题,因为我不想开始使用旧的REST API方法。
答案 0 :(得分:0)
即使我有同样的问题,我也在facebook论坛发布了。主持人告诉我,这是一个目前尚无解决方案的问题。看一下这个帖子 - http://forum.developers.facebook.com/viewtopic.php?id=56590
答案 1 :(得分:0)
相反,我已经在我的博文here中找到了解决这个问题的方法。看看吧。
答案 2 :(得分:0)
过去两天一直在努力解决这个问题,并在Facebook developers forum上找到了解决这个问题的方法。
答案 3 :(得分: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
答案 4 :(得分:0)
试试这篇文章http://novacoders.blogspot.com/2011/04/facebook-apps-oauth-20-authorization.html
如果您不使用任何Web服务器,则需要使用Javascript SDK。 FB.init()返回所有必要的数据,如access_token。
答案 5 :(得分:0)
您无法在画布iframe中执行简单的重定向302或301,因为这只会重定向iframe中的内容。 Facebook推荐的是发送一小段JavaScript,将top.location
设置为dialog / oauth页面。
<script>top.location='https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&scope=publish_actions';</script>.
clientid
是您的AppId,redirect_uri
是处理来自身份验证对话框页面的重定向的页面。