【问题标题】:How to handle facebook authorization when user clicks "dont allow"当用户点击“不允许”时如何处理 Facebook 授权
【发布时间】:2025-11-29 14:05:02
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php javascript facebook authorization


    【解决方案1】:

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

    我所做的是设置一个会话变量,我在重定向到身份验证对话框之前尝试对其进行授权。这样,如果我最终没有获得授权用户,我可以看到他们已经尝试过并显示适当的消息。像这样的:

    $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");
    }
    

    希望有帮助!

    【讨论】:

    • 这是个好主意!这个想法甚至都没有出现在我的脑海中。我想我太专注于我认为应该工作的事情了!哈哈。谢谢!