该应用程序不断要求“有离线访问权限”,为什么?

在使用oAuth2授权应用程序并获取请求范围的权限之后,每次尝试使用Google oAuth2login时,我仍然会收到一个屏幕,询问是否允许应用程序具有脱机访问权限。 是不是不应该再次出现,一旦我授予它的权限?

在这里输入图像说明

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

关于这个的参考可以在这里find。

这个提示可能来自两个参数,

  • access_type(如果是“离线”)
  • approval_prompt(如果是“强制”)

确保你已经设置access_type为'online',apporoval_prompt为'auto'

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

我的猜测是,您的应用程序有approval_prompt =强制每次强制OAuth。 由于用户已经授权了您要求的任何范围,因此无需重复。 然而,屏幕上必须说些什么,所以如果没有更好的想法,Google会要求“离线访问”。

只要确保你没有强制授权,你应该没问题。

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

第一过程同意如下:

  1. 用户同意应用程序获取有关用户的信息。
  2. 当用户点击接受button时,浏览器会将同意信息保存到Cookie中,Google帐户将保存权限(请参阅https://security.google.com/settings/security/permissions

从第二个过程:

浏览器检查cookie帐户允许的cookie权限。

  • 如果cookie存在于浏览器中并且具有此应用程序的许可权( https://security.google.com/settings/security/permissions ):同意屏幕将被忽略
  • 如果浏览器中存在Cookie,但没有此应用程序的许可权:将显示同意屏幕
  • 如果浏览器中不存在cookie:应用程序将显示“有离线访问”。

根据增量授权机制和devise,这很可能是非常正常的。这个想法是,如果用户已经授予应用程序的权限,则不需要显示相同的权限并要求用户批准。

http://googleplusplatform.blogspot.com/2013/12/google-sign-in-improvements11.html