【问题标题】:Facebook OAuthException: "user hasn't authorized the application to perform this action"Facebook OAuthException:“用户尚未授权应用程序执行此操作”
【发布时间】:2011-05-08 16:10:44
【问题描述】:

使用 Facebook PHP SDK,我在尝试发布状态更新时收到以下错误:

致命错误:未捕获的 OAuthException: (#200) 用户未授权 执行此操作的应用程序

这些是我采取的步骤:

  1. 获取代码:

    https://graph.facebook.com/oauth/authorize?client_id=FB_APP_ID&redirect_uri=REDIRECT_URI
    
  2. 获取访问令牌:

    https://graph.facebook.com/oauth/access_token?client_id=FB_APP_ID&code=CODE&client_secret= FB_SECRET&redirect_uri=REDIRECT_URI
    
  3. 尝试状态更新:

    require_once(facebook.php);
    $fb = new Facebook(array(
        'appId' => FB_APP_ID,
        'secret' => FB_SECRET
    ));
    $post = $fb->api('me/feed', 'POST', array(
        'access_token' => ACCESS_TOKEN, 
        'message' => 'hello world!'
    ));
    

我在我的应用程序中看不到任何授权应用程序执行此操作的设置,但也许我遗漏了一些东西。有什么建议吗?

【问题讨论】:

    标签: php facebook oauth


    【解决方案1】:

    确保在请求代码时请求扩展 publish_stream 权限(作为第三个参数添加):

    https://graph.facebook.com/oauth/authorize?client_id=' . FB_APP_ID . '&redirect_uri=' . REDIRECT_URI . '&scope=publish_stream'
    

    希望这会有所帮助。

    干杯!

    【讨论】:

      【解决方案2】:

      我也遇到了同样的问题,这篇帖子真的帮了我很大的忙http://facebook.stackoverflow.com/a/8502709/965536

      与我的问题的唯一区别是我使用的是 PHP SDK,但本质上它的工作原理相同。我使用了api调用

      $permissions = $facebook->api('/me/permissions');
      

      然后您可以运行检查

      if(isset($permissions['data'][0]['publish_stream']) && $permissions['data'][0]['publish_stream'])
      

      这对我有用,但有人可能有更好的答案。此外,您应该将您的发布帖子流包装在 try catch 中

      希望这会有所帮助。

      谢谢

      【讨论】:

      • 这是正确的答案,因为用户可以更改应用在注册时和以后任何时候拥有的权限。无法确保实际授予所请求的权限。
      【解决方案3】:

      我在这里提供了更多信息:

      马克在上面的回答让我找到了正确的方向。但我又花了 5 个小时才弄清楚解决方案。

      1. 我正在为 ruby​​ on rails 使用 omniauth-facebook。
      2. 我需要设置omniauth的范围(请参考https://github.com/mkdynamic/omniauth-facebook)
      3. 我还准备了来自“陆晨”的这篇帖子来设置正确的范围请求 http://developers.facebook.com/blog/post/2012/04/25/streamlining-publish_stream-and-publish_actions-permissions/

      所以,这里是 omniauth.rb 的结果:

      provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
              :scope => 'email,user_birthday,publish_actions'
      

      【讨论】:

        【解决方案4】:

        您是否已采取其他必要步骤将用户与您的应用联系起来并让他们授权您的应用执行这些操作?您需要注册用户,然后调用 showPermissionDialog 让他们登录并授权您的应用程序。这就是这个错误告诉你的。

        【讨论】:

        • 基本上我采取的唯一步骤就是我上面列出的。我正在尝试关注 Facebook 的身份验证文档 (developers.facebook.com/docs/authentication),但它们是语言中立的并且有点模糊。你有 PHP 中的 showPermissionDialog 的例子吗?
        • 这是一个在登录时使用的 javascript 函数,虽然它可能特定于我正在使用的 symfony 插件。请参阅 phpfour 的回复,这也可能有帮助(至少比我的更多)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        • 2012-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多