请求 OAuth 凭据时,我可以将 access_type 指定为 Offline 或 Online。
选择在线访问类型会强制用户在每次登录时批准对我的应用程序的访问。这是为什么?用户不是已经批准了我的应用程序吗?
更新 #1:
我有我的批准提示设置为“自动”。
如果我只是退出谷歌而不删除任何 cookie,它不会再次提示我。但是删除 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
在View中调用Helper方法
<a href="<%= build_auth_uri %>"> Connect Me! </a>
在网页上生成 OAuth URL
https://accounts.google.com/o/oauth2/auth?access_type=online&approval_prompt=auto&redirect_uri=http://localhost:3000/gclient/gcallback&response_type=code
最佳答案
在这些流程中还有另一个参数起作用,我怀疑您正在遇到它。这是approval_prompt
范围。
当access_type=online
您还可以为 approval_prompt
指定一个值.如果设置为 approval_prompt=force
,您的用户将始终收到提示,即使他们已经授予。
另一方面,当 access_type=offline
, approval_prompt
只能设置为 approval_prompt=force
,但为了弥补这一限制,您还获得了 refresh_token
您可以使用它来刷新您的访问 token 。
检查您的 access_type=online
的 URL正在开放。尝试设置 approval_prompt=auto
.授予屏幕应该只出现在第一次。
关于authentication - access_type = Online 什么时候合适? :OAuth2 - Google API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11475101/