2012-04-16 120 views
0

为了做到这一点,我遵循了Facebook开发者教程,无济于事。页面标签页中的oauth facebook

基本上我需要用户从页面选项卡授权我的应用程序。

我已经用他们推荐的JavaScript重定向页面加载用户将其重定向到OAuth的弹出然而,当应用程序加载时我只得到了可怕的“对不起,发生了错误”

所生成的网址是“https://www.facebook.com/dialog/oauth/?client_id=247274355370447 & redirect_uri = https%3A%2F%2Fwww.facebook.com%2Fpages%2Fnull%2F286793781401206%2F247274355370447 & scope = email,user_about_me”so I可以看到我的变量page_id和app_id都被传入。

这是我的完整JS代码

<script> 
var oauth_url = 'https://www.facebook.com/dialog/oauth/'; 
oauth_url += '?client_id=<? echo $app_id;?>'; 
oauth_url += '&redirect_uri=' +  encodeURIComponent('https://www.facebook.com/pages/null/<?php echo $page_id;?>/<?php echo $app_id;?>'); 
oauth_url += '&scope=email,user_about_me' 
window.top.location = oauth_url; 
</script> 

回答

1

我建议使用如果您希望用户在授权后仍保留在页面选项卡上,则使用FB.login()函数。您可以使用此代码这样做:

FB.login(function(response) { 
    if (response.authResponse) { 
     // do something with newly authorized user 
    } else { 
     console.log('User cancelled login or did not fully authorize.'); 
    } 
}, {scope:'PERMISSION_1', 'PERMISSION_2'}); 

它将在iframe打开对话框,并引发回调他们已经提交或取消授权后。

此解决方案使用JavaScript SDK。

+0

Hi @ jason-decamp,我一直在尝试按照标准代码示例使用FB Javascript SDK。你的FB.login代码通常会创建一个弹出的oauth对话框,大多数浏览器都会阻止它,除非它被按钮触发。我希望能够自动为未登录的用户调用FB.login,并在iframe中打开对话框。你是做什么? – 2012-08-15 15:28:41

0

我认为这可能是因为你试图将它们重定向回facebook.com,所以它没有看到这是你的应用程序的有效url。您需要重定向到您自己网站上的页面,然后如果需要将它们从那里重定向到实际的Facebook页面应用程序选项卡

2

我遇到同样的问题。

你应该可以做到这一点。

在用户单击对话框中的按钮后重定向到的URL。您指定的网址必须是具有与您应用设置中指定的相同基本域的网址,格式为hxxps://apps.facebook.com/YOUR_APP_NAMESPACE的网页网址或格式为hxxps://的网页标签网址www.facebook.com/PAGE_USERNAME/app_YOUR_APP_ID

这对我不起作用。我仍然得到错误说redirect_uri不属于用户。

我宁愿不必在我的网站上添加一个页面,将它们重定向回该网站,但它似乎是正确的方式不起作用。

我目前发现的最简单的修复方法是将redirect_uri设置回我的域中的页面。从page_tab内容加载相同的域。

例如我的页面标签加载hxxp://example.com/所以设置REDIRECT_URI到hxxp://example.com/redirect.php

在redirect.php使用如下代码

<script> 
window.top.location = "{YOUR_FACEBOOK_PAGE_TAB_URL}"; 
</script> 
+0

这样的工作,但它是一种愚蠢的做事方式....我刚刚看到你的用户名。这是唯一对我有用的东西。 – 2012-08-16 20:13:46