在请求OAuth凭据时,我可以将access_type指定为脱机或联机。
选择在线访问类型会强制用户在每次登录时批准对我的应用的访问权限。这是为什么?用户尚未批准我的应用程序吗?
更新#1:
我将appro_prompt设置为'auto' 如果我只是在不删除任何Cookie的情况下退出Google,则不会再次提示我。但删除cookie会带回授权屏幕。
更新#2:
通过OAuth Playground可以正常工作。 http://code.google.com/oauthplayground/
将OAuth 2.0用于Web服务器应用程序 https://developers.google.com/accounts/docs/OAuth2WebServer
更新#3: 相关代码片段
生成OAuth URL的帮助方法
def build_auth_uri
return @client.authorization.authorization_uri(
:access_type => :online,
:approval_prompt => :auto
).to_s
end
在视图中调用Helper方法
<a href="<%= build_auth_uri %>"> Connect Me! </a>
在网页上生成OAuth网址
https://accounts.google.com/o/oauth2/auth?access_type=online&approval_prompt=auto&redirect_uri=http://localhost:3000/gclient/gcallback&response_type=code
答案 0 :(得分:13)
还有另外一个参数在这些流程中起作用,我怀疑你遇到了它。这是approval_prompt
参数。
access_type=online
时,您还可以指定approval_prompt
的值。如果设置为approval_prompt=force
,则会始终提示您的用户,即使他们已经授予了用户。
另一方面,当access_type=offline
,approval_prompt
只能设置为approval_prompt=force
时,为了弥补此限制,您还会获得一个refresh_token
您可以使用刷新访问令牌。
检查access_type=online
正在打开的网址。尝试设置approval_prompt=auto
。授权屏幕应该只在第一次出现。