【问题标题】:Facebook UID from response doesn't match with user's uid stored in database来自响应的 Facebook UID 与存储在数据库中的用户 uid 不匹配
【发布时间】:2016-06-06 23:02:56
【问题描述】:

我在使用 Facebook 登录时遇到了今天发生的问题。 我正在使用 Rails omniouth-facebook gem 通过 Fb 对用户进行身份验证。

所以,经过一些调试后,我发现我从 Facebook 收到的 uid 与特定用户存储在数据库中的 uid 不同。

我有这部分:

find_by(provider: auth.provider, uid: auth.uid)

其中 auth 是 env['omniauth.auth'],当我在我的数据库中手动检查 auth.email 的用户时 uids 不匹配,所以这个函数总是返回 nil 和登录失败。

有人知道可能是什么问题吗?真的很感激任何提示。

谢谢, 博扬

【问题讨论】:

  • UID 是否有作用域?根据 API 和上下文,Facebook 可能会返回与特定页面的关系唯一的 ID。
  • 我不知道它是否有范围,我想是的,因为我已经注册了 Fb 应用程序。并且在暂存几乎相同的配置时,一切正常
  • 我刚刚检查过,它的范围是因为它使用 V2.5 关键是它大约在 4-5 小时前工作,我不确定发生了什么以及如何解决它。

标签: ruby-on-rails facebook uid


【解决方案1】:

在 API v2.0 中,Facebook 引入了应用范围内的用户 ID。

对于在切换到 2.0 后登录到您的应用的每个新用户,您将不再获得他们的“全局”用户 ID,而只会获得一个应用范围内的用户 ID,这是您的应用所独有的 - 以更具体地说,它与您的应用 ID 相关联。

因此,如果您使用不同的应用程序 ID,请分别使用不同的应用程序 ID。在某些时候切换应用 ID,当然您会为同一用户获得不同的应用范围 ID。

如果您的企业有多个应用,您可以通过商务管理器将它们连接起来,这样您就可以为不同的应用连接不同的应用范围用户 ID。

【讨论】:

  • 感谢您的回复。所以这里的重点是,这只是我们用于生产的一个应用程序,我们从今年 1 月开始使用它。从昨天开始,当我注意到这个问题时,一切都很完美。我们没有碰 App 也没有 Facebook_key/Facebook_secret 那里。所以现在我们现有的用户抱怨他们无法通过 Facebook 登录,我们必须迅速找到解决方案。你有什么建议吗?
  • 应用范围内的用户 ID 应该保持不变,对于相同的应用 ID。如果不是这种情况,请提交错误报告:developers.facebook.com/bugs
  • 我也注意到了,当我尝试做类似的事情时:www.facebook.com/user_id 它适用于两个 uid。从数据库中挖掘现有用户,从响应中挖掘新用户。也许我应该用新的更新它们?
  • 当我使用这个graph.facebook.com/me?access_token 时,我得到了与数据库中不同的uid。同样使用带有令牌的developers.facebook.com/tools/debug 我从响应中得到我看到有一个差异UID 然后我在数据库中。我只是不知道这是怎么发生的,因为应用程序凭据是相同的,没有任何改变。
  • 第一件事是正常的 - www.facebook.com/{app-scoped-user-id} 应该重定向到浏览器中的“真实”配置文件 URL。 / 同样,如果您确定使用的应用程序 ID 仍然相同 - 提交错误报告;这不应该发生。
猜你喜欢
  • 2018-04-08
  • 2017-08-28
  • 2018-09-11
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 2019-04-23
相关资源
最近更新 更多