【问题标题】:Rails omniauth Google - how to update profile dataRails omniauth Google - 如何更新个人资料数据
【发布时间】:2017-12-20 16:35:45
【问题描述】:

我正在使用 omniauth 通过 Google 对用户进行身份验证。当用户通过 Google 登录时,我会检查是否已存在使用相同电子邮件的帐户(如果存在,我会拒绝登录)。

当我创建新的用户模型时,我给它名称、电子邮件和用户“图像”的 URL。我不确定当用户更改他们在 Google 上的设置时如何动态更新我的数据库中的信息,包括他们更改个人资料图片时的 image_url。

这个场景的一个很好的例子就是这个 Stack Overflow;我在 Google 上注册了 SO。 (最近)更改了我的个人资料图片后,我惊讶地发现我的旧 Google 图片仍然附加到我的 SO 个人资料中。也许谷歌需要时间来改变旧的 URL 来代表新的图像。我注意到 Google 的 一些 部分使用我的新图像,而其他部分继续使用我的旧图像。当然,这个问题与谷歌的头像机制没有太大关系,我只是觉得这是一个完美的例子。

我的问题是:

  • 我应该这样做,还是应该让用户通过我的网站更改他们的详细信息,完全忽略他们的 Google 个人资料会发生什么?

  • 如果我应该这样做,最好的方法是什么?检查每次登录并不理想,因为用户可能几天甚至几周都不会注销。

  • 我应该存储 Google 身份验证令牌吗?目前,我不需要进行任何 Google API 调用——我只对“uid”使用 OAuth,以确保它是同一个帐户登录(根本不使用电子邮件)。

我认为答案不会是“不存储用户信息,而是查询 Google”,所以我不确定在这种情况下最佳做法是什么。一个关于正确程序的简短演练将非常有帮助。

【问题讨论】:

  • 包括清楚解释的代码
  • 该代码没有任何用处。这是一个最佳实践问题,可以针对任何语言提出。我的代码运行良好,但到目前为止我所拥有的与这些问题完全无关。

标签: ruby-on-rails postgresql oauth


【解决方案1】:

通常,oauth 应用程序将使用端点 /me.json 作为登录过程的一部分:用户登录后,应用程序使用该新令牌立即查询其个人资料信息并更新数据。就您而言,我了解您在电子邮件已经存在时忽略。您可能应该在那里添加一个新步骤,以更新您的本地记录(如果它已经存在)而不是完全忽略它。

换句话说,如果用户更改了他们的个人资料图片,您的应用不会自动收到通知。但是您始终可以使用他们的登录操作来获取最新的图像(或者在每 n 次运行的后台作业中使用他们的令牌,使用 cron + 之类的东西,假设 oauth 范围授权离线访问)

【讨论】:

  • 只有在电子邮件已存在且用户未使用同一 Google 帐户注册时,我才会拒绝登录。我可以做到这样,每次用户登录时,我都会更新数据库中的信息。
  • 另外:目前我没有存储从omniauth 提供的Google 令牌。我应该存储它以进行验证还是什么?我不使用任何 Google API,所以我不需要令牌。我认为谷歌有可能使该令牌无效(也许他们注销了谷歌),所以如果令牌无效,我希望能够注销用户。
  • 是的,您应该存储令牌(准确地说是两个令牌)。这样您就可以在需要时刷新令牌,并且知道注销用户是否无效
猜你喜欢
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多