3

我有一个 Rails 应用程序,它使用带有Google OAuth gem的 Devise来让 Google 用户认可我的应用程序。

我对 OAuth 的理解是,我们使用受信任站点 (Google) 的说法,即用户就是他们所说的那个人:在此之后,用户登录到他们的 Google 帐户的事实应该与我们的站点无关。但是,我们希望将用户的登录信息与他们在 Google 上的登录状态联系起来:如果他们退出 Google,我想将他们从我们的应用程序中退出。

在网上搜索解决方案时,我提出了相反的问题:当用户使用完我们的应用程序后,如何让他们退出 Google?太疯狂了。

理想情况下,Google 会提供一个回调 API,在用户注销时通知我的应用程序。我还看到了另一个 hacky 解决方案,它允许您确定用户是否登录到任何 Google 帐户,但我更喜欢更准确的东西(特定用户与任何用户)。

我还看到了可以使用 Google 的联系人 API 来确定状态的提示。

更新

在过去的一周里,我继续对此进行一些研究,我将在这里发布我的发现。查看 OAuth2 过程的 Google 文档,似乎有两个相似但不同的设置:

  1. 用于 Web 服务器的 OAuth2
  2. 用于登录的 OAuth2

我用于将人们登录到我的服务中的 Devise 策略宝石似乎使用了其中的第一个。但是,第二种技术使用相同的端点并且具有几乎所有相同的参数,并且文档指出第一种技术也适用于这个。

但是,我发现的一种可能性是 Login(第二个)进程有一个“prompt”参数,它接受“none”值。设置后,文档说如果用户已经登录,身份验证请求将立即返回错误。结合“login_hint”参数,我可以提供用户的电子邮件地址,这将是解决我的问题的明确途径。

但。使用第二种技术,无论我是否实际登录,授权请求总是立即返回错误。我想知道这是否与我实际上是通过第一种技术登录的事实有关?为了正确测试这一点,我将不得不破坏我的身份验证系统并用第二种技术替换它。

4

0 回答 0