11

在请求 OAuth 凭据时,我可以将 access_type 指定为 Offline 或 Online。

选择在线访问类型会强制用户在每次登录时批准对我的应用程序的访问。这是为什么?用户不是已经批准了我的应用程序吗?

更新#1:

我将approval_prompt 设置为“自动”。
如果我在不删除任何 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

在 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
4

1 回答 1

16

在这些流程中还有另一个参数起作用,我怀疑您遇到了它。是approval_prompt参数。

access_type=online您还可以为approval_prompt. 如果设置为approval_prompt=force,将始终提示您的用户,即使他们已经授予。

另一方面,when access_type=offline,approval_prompt只能设置为approval_prompt=force,但为了弥补这一限制,您还refresh_token可以使用它来刷新访问令牌。

检查您access_type=online正在打开的 URL。尝试设置approval_prompt=auto。授权屏幕应该只在第一次出现。

于 2012-07-13T19:14:40.210 回答