如何在用户点击“不允许”时处理Facebook授权

时间:2011-06-17 15:08:57

标签: php javascript facebook authorization

我正在开发一个可以在iFrame中运行的facebook标签应用程序。除了处理用户点击“不允许”的情况外,我在授权方面完全可以正常工作。但在这里我被困住了。昨晚花了几个小时试图解决问题,我不知道从哪里开始。

我的应用程序正在采取的流程是这样的。首先,提示用户“喜欢”该页面以访问更多应用程序。此时如果他们点击就会显示下一步,但首先会检查该应用是否有授权。如果没有,则在onload事件中放置一些JS,将父框架重定向到授权链接,并将return_uri设置为页面应用程序选项卡的链接。如果用户单击“允许”,这将非常有效。如果他们单击“不允许”,那么它最终将按照循环进行循环,并重复返回授权页面。我想要它做的是显示一个小的解释页面,如果用户希望重新考虑他们的选择,可以链接回授权页面。

我发现阻止我处理此问题的问题是应用程序位于页面上的iframe中,return_uri链接回(页面上的应用程序选项卡)。因此错误和error_reason GET变量不适用于我的代码,只有父框架是facebook而不受我控制。

如何将此功能添加到我的应用程序中?谢谢!

1 个答案:

答案 0 :(得分:3)

我在页面标签中遇到了同样的问题。我正在使用OAuth对话框来处理登录,但就像你说的那样,你重定向到包含应用程序的页面网址,你就无法得到错误。

我所做的是在重定向到auth对话框之前设置我试图授权的会话变量。这样,如果我最终没有获得授权用户,我可以看到他们已经尝试过并显示相应的消息。像这样:

$facebook = new Facebook(array(
     'appId'=>'my_app_id',
     'secret'=>'my_secret')
);

$fb_user = $facebook->getUser();
if( $fb_user ) {
    $_SESSION['auth_check'] = 0;
    // rest of application is authorized
}
elseif( isset($_SESSION['auth_check']) && $_SESSION['auth_check'] ) {
    // we attempted to authorize before and something went wrong
    // show a message explaining they need to authorize
    $_SESSION['auth_check'] = 0; // set so they get the auth screen again
}
else {
    $_SESSION['auth_check'] = 1; // attempting to authorize
    header("Location: $fb_oauth_dialog");
}

希望有所帮助!