Google OAuth 自动登录

问题描述 投票:0回答:5

我有一些关于 OAuth2.0 流程的问题。 我想实现类似 Stack

Log with google account
功能。

我正在使用 Google 的 PHP 库。

我可以检索刷新令牌和访问令牌。

到目前为止一切顺利,我的问题是:当用户从我的网站注销并再次单击按钮时,我应该如何知道用户是谁从数据库检索正确的刷新令牌?

我考虑过将电子邮件保存在 cookie 中,但 StackOverflow 似乎没有这样做,因为我清除了 cookie,但当我单击按钮时 Stack 继续连接我,而不显示“应用程序范围授权”google 页面。

我错过了什么吗? 是否有API允许在没有令牌的情况下获取用户电子邮件? 也许 RefreshToken 应该只用于您认识用户的移动应用程序?

我想要实现的功能比较简单,用户点击登录,第一次就必须批准申请。完成后,我想在单击登录按钮时自动连接用户。

感谢您提供任何相关信息

php oauth-2.0 google-oauth
5个回答
2
投票

https://developers.google.com/accounts/docs/OAuth2Login描述了如何使用Google/OAuth2实现登录。


1
投票

当用户第一次单击登录按钮并输入登录详细信息时,OAuth 将返回所有用户数据,包括电子邮件和 Google ID。因此,您可以将 google ID 与电子邮件一起存储在数据库中。此外,当用户注销并再次单击登录按钮时,OAuth 会再次检索数据。因此,您可以使用数据库中存在的 google ID 检查 OAuth 检索到的 google ID。


1
投票

您需要做的是设置一个具有唯一 ID 的持久 cookie,并在数据库中创建一个条目,将该 ID 与登录的用户相关联。

显然,当用户第一次使用 OAuth 登录您的网站时,您需要在数据库中创建用户记录。

您还需要重定向到正确的 Google OAuth 端点来为离线用户检索令牌,否则令牌将过期并且在一段时间后无法自动续订。

我专门写了一篇关于“获取 Google OAuth 令牌”以供离线使用的文章,并根据您的需要保持其有效和可更新。本文是关于我编写的一个类,其中包含执行此操作的所有代码,包括将令牌存储在数据库中。


0
投票

更改端点:您可以使用以下 HTTP 请求路径将 userinfo 端点替换为 people.get 端点:

https://www.googleapis.com/plus/v1/people/me

如果您需要 OpenID Connect 格式,请使用以下 HTTP 请求路径将 userinfo 端点替换为 people.getOpenIdConnect 端点: https://www.googleapis.com/plus/v1/people/me/openIdConnect 更改范围:如果您的应用当前使用 https://www.googleapis.com/auth/userinfo.profile 范围,您可以切换到配置文件范围。您的应用程序获得与之前相同的个人资料信息,因此您的用户无需重新同意。 迁移应用程序获取电子邮件地址的方式:如果您使用 userinfo 端点来获取用户电子邮件地址,则可以迁移应用程序获取电子邮件地址的方式。

https://developers.google.com/+/api/auth-migration#email


0
投票
Google sign-in

能够被自己点击,像这样

要实现此目的,您只需将属性 data-auto_select

添加到下面给出的代码片段中,并将其设置为

true

<div id="g_id_onload"
     data-client_id="YOUR_GOOGLE_CLIENT_ID"
     data-auto_select="true"
     data-login_uri="https://your.domain/your_login_endpoint">
</div>


© www.soinside.com 2019 - 2024. All rights reserved.