2014-01-13 69 views
34

在使用oAuth2授权应用程序并获取所请求范围的权限之后,我仍然会收到一个屏幕询问我是否允许应用程序权限为每次尝试使用Google oAuth2登录时都离线访问。一旦我允许它拥有它,它不应该再次出现吗?该应用程序不断要求“有离线访问权限”,为什么?

enter image description here

+0

你要重定向到哪些URL? – SLaks

+0

你是什么意思?处理授权代码并记录用户的URL。 – jayarjo

+0

您传递给Google的OAuth端点的参数是什么? – SLaks

回答

10

你使用approval_prompt参数?如果您已有刷新令牌,请尝试不再请求离线访问。即使用户再次登录,但不要求离线访问,它应保持有效

有关此的参考可以在here找到。

+0

并且是否还有任何其他可能的approval_prompt值,而不是 - force?谷歌客户端库似乎默认发送它(必须检查来源)。 – jayarjo

+0

另一个值是'auto'。 –

+12

在localhost上开发时,行为似乎有所不同:无论“approval_prompt”的值是什么,您都将获得“有离线访问权限”。 –

7

我的猜测是,您的应用程序已经approval_prompt =力每次强制的OAuth。由于用户已经授权您要求的任何范围,因此无需重复。但是屏幕有说些什么,所以在没有更好的想法,谷歌的请求“脱机访问”。

只要确保你没有强迫权威性和你应该罚款。

+0

我检查和谷歌客户端库似乎默认发送approval_prompt =强制。你是这个意思吗?我没有看到其中的任何其他参数在URL中有词强制。 – jayarjo

+0

是的,这是一个。我已经编辑了我的答案,以更正参数名称 – pinoyyid

13

此提示可能会因为两个参数ETERS,

  • ACCESS_TYPE(如果它是 '离线')
  • approval_prompt(如果是 '力')

请确保您已设置ACCESS_TYPE到 '在线' 和apporoval_prompt为“auto '

$client->setAccessType('online'); 
$client->setApprovalPrompt('auto') ; 
+0

你节省了我的一天。感谢一堆:) –

+0

真棒..它帮助 – Gags

5

这不是一个错误。这是google oauth2的正常情况。

第一过程同意如下:

  1. 用户同意该应用程序获得关于用户的信息。
  2. 当用户点击接受按钮,浏览器会保存许可信息到饼干和谷歌帐户,将节省的权限(请查看https://security.google.com/settings/security/permissions

从第二个过程:

浏览器检查谷歌的饼干同意在未经许可的帐户。

  • 如果在浏览器中存在的cookie,并有权对这个应用程序(https://security.google.com/settings/security/permissions):同意画面将被忽略
  • 如果在浏览器中存在的cookie,但没有为这个应用程序的权限:将显示
  • 同意画面
  • 如果浏览器中不存在cookie:应用程序将显示“有离线访问”。
相关问题