【问题标题】:logout.php with access_token doesn't work any more带有 access_token 的 logout.php 不再起作用
【发布时间】:2013-04-03 17:52:09
【问题描述】:

几个月前我们设置了 Facebook 集成,直到本周注销停止工作之前一切都很好。

我们使用:

  • 用于识别用户的 JS sdk
  • 大多数情况下直接从 php 调用 API(使用 file_get_contents

对于注销,我们将用户从我们的应用程序中注销(包括删除 cookie),然后使用 javascript 重定向到此 url:

"https://www.facebook.com/logout.php?access_token=". $FB_ACCESS_TOKEN . "&next=" . urlencode($loginUrl)

用于将用户从 facebook 注销,然后将他们带到我们的登录页面。

现在它让他们保持登录状态,并将他们带到

https://www.facebook.com/home.php

这是一个 facebook 错误,还是我使用了一个本来不打算供应用程序使用的功能?我猜我可以使用 javascript API 来完成这项工作,只是想检查一下我是否应该对我目前的做法做一些小的改变。

编辑:

另一个想法(如果有人知道的话)是权限的工作方式可能发生了变化,我的意思是在用户登录时请求额外的权限?目前我只要求:

email,publish_actions

【问题讨论】:

  • 应用程序并不是为了让用户退出网站。它们只是为了让用户退出应用程序本身(也就是终止会话)
  • 谢谢汤米,但我认为你搞错了。在developers.facebook.com/policy 的 I.6 中,它说应用程序也可以让用户退出 facebook。
  • 我刚刚查看了 php sdk 的源代码,它生成的 url 与我上面的相同(github.com/facebook/facebook-php-sdk/blob/master/src/… 的第 610 行)
  • 你是对的,很好的发现!我的错!

标签: php facebook logout


【解决方案1】:

如果注销 url 将您带到 https://www.facebook.com/home.php,则表示访问令牌或下一个 url 配置不正确。

尝试将下一个 url 设置为下一个页面(例如 www.yourapp.com/logout.php),然后从那里重定向到您的应用程序。

【讨论】:

  • 如果下一个 url 有问题,我希望它仍然会注销,但会留在 facebook 登录页面。但我认为没有问题,因为访问令牌和下一页在过去 3 个月中都运行良好。因此,这似乎是 Facebook 方面悄悄发生的变化。
【解决方案2】:

来自 Facebook 的 SDK documentation,用于使用 Javascript 注销:

FB.logout(function(response) {
  // user is now logged out
})

FB.logout 将使用户退出您的网站和 Facebook。

我建议使用回调来重定向用户,而不是直接链接到 facebook.com/logout.php

【讨论】:

  • 谢谢,这就是我正在寻找的下一个选择...只是想知道为什么 php sdk 坏了
【解决方案3】:

原来我的 access_token 无效。我将它存储在 varchar(150) 字段中,但现在较新的令牌更长。

因此,在登录页面上使用的令牌是正确的,但在以后的页面(如注销)上,它是从数据库中检索并被截断,因此 Facebook 无法再对其进行解密。

作为参考,对于其他人来说,它看起来没有最小长度 - 目前 255 可以工作,400 会更安全,但 oauth 规范允许任何长度,因此需要一个 smalltext 字段完全安全。

【讨论】:

    【解决方案4】:

    这也发生在我身上,我终于意识到是因为我改变了网站的地方。我确实将 OAuth 重定向 URL 更新到新位置,但忘记在基本设置中更改站点地址....

    1. 转到 Facebook 应用控制台
    2. 转到设置 -> 基本。在站点 URL 中输入我的新 url

    注销 url 再次生效!

    【讨论】:

      【解决方案5】:

      您需要在 Facebook 应用设置中拥有要重定向到的页面的域

      设置 -> 基本 -> 应用程序域

      但是这些域有规则...

      应用程序域必须与 Facebook 网页游戏 URL (https)、移动站点 URL、Unity 二进制 URL、站点 URL 或安全页面标签 URL 的域匹配。

      如果您想拥有 2 个不同的 URL,那么您可以同时使用“站点 URL”和“安全页面标签 URL”

      设置 -> 基本 -> 网站 -> 网站 URL

      设置 -> 基本 -> 页面选项卡 -> 安全页面选项卡 URL

      【讨论】:

        猜你喜欢
        • 2017-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-08
        • 2014-07-20
        • 2021-03-24
        相关资源
        最近更新 更多