【发布时间】:2016-02-09 10:37:44
【问题描述】:
简短说明:
如果用户已经授予我的应用程序 OAuth 访问他们的 google 个人资料的权限,我希望他们不必在每次登陆我的主页并自动登录时都必须按“使用 google 登录”按钮。
如果用户尚未授予访问权限,我想向他们展示带有“使用 google 登录”按钮的登录选项页面。
详细说明:
我正在按照此链接中的说明实施 Google OAuth 流程:
Using OAuth 2.0 for Web Server Applications
为了清楚起见,有问题的流程如下:
- 使用“使用 google 登录”按钮呈现(客户端)用户
- 用户按下按钮后,将他们重定向到 google 的 OAuth 2.0 服务器,他们允许/拒绝我的应用程序访问他们的 google 个人资料
- 如果用户允许访问,谷歌会将他们重定向回我的应用程序
- 我的应用程序(服务器端)使用已获得的授权来获取访问令牌
- 我的应用程序(服务器端)使用获取的访问令牌访问用户的个人资料
我想实现以下目标:
如果用户之前已经允许我的应用程序访问他们的 google 个人资料(在当前计算机或其他计算机上),我希望他们在导航到我的应用程序后立即登录到我的应用程序(使用 google)应用程序的 URL。无需点击任何东西。
这乍一看不是问题。为此,我将自动执行上述流程的第 1 步和第 2 步。用户将被自动重定向到谷歌 oauth 服务器 - 无需按下“使用谷歌登录”按钮 - 在他们导航到应用程序的 URL 之后。反过来,Google 会立即通过有效授权将用户重定向回我的应用程序(同样不需要用户的任何输入)。其余的保持不变。用户会有立即登录的印象。
这种方法有一个问题。如果用户第一次访问我的页面(之前没有授予我的应用程序访问权限),他们也会被重定向到 google OAuth 页面。但是由于他们还没有授予访问权限,也没有按下任何 sing in 按钮,他们最终会盯着 google oauth 服务器页面,一头雾水,不知道发生了什么。
是否有一些 API,我可以通过这些 API 检测到用户尚未授予对我的应用程序的访问权限(我应该首先向他显示唱歌按钮)?
如果您的解决方案涉及一些 API 调用,请指出一个 HTTP/REST API,因为我不使用(也不想使用)任何更高级别的 OAuth 库。
谢谢。
【问题讨论】:
-
这听起来更像是您应用端的会话管理/cookie 问题,而不是 OAuth 登录问题。此外,维护设备(甚至浏览器)之间的会话状态几乎是不可能的。您的应用使用什么平台?
-
它是 AngularJS(客户端)+ Web API(服务器)。我不相信我正在尝试维护设备之间的会话。我唯一想要实现的是在满足两个条件时自动登录用户:1.用户在当前计算机上登录谷歌,2:用户已经批准访问我的应用程序(在当前计算机或任何其他计算机上)。用户已授予我的应用程序访问他的 google 帐户的权限这一事实与会话无关。它存储在他们的谷歌个人资料中。
-
您使用的是 Google 登录客户端吗?如果是这样,在初始化 GoogleAuth 对象后,您可以检查并查看客户端是否已使用
isSignedIn.get()登录,或者您可以通过检查返回的 GoogleUser 上的hasGrantedScopes()来检查他们是否已经授权您的应用程序currentUser.get()。如果他们未登录或未向您的应用授予范围,请不要自动执行该过程。 -
@ZanyCadence,感谢您提及此选项。您介意在此处粘贴上述 GoogleAuth 库的主页 URL 吗?谢谢。
-
@TyphoonOfDvina 这个问题你解决了吗?
标签: oauth oauth-2.0 google-oauth