0

当我按照 Hadley 的 R google Oauth2.0 演示访问 Fusion 表时,刷新令牌不可用。

演示:https ://github.com/hadley/httr/blob/master/demo/oauth2-google.r

修改后的“离线”尝试示例:

google_token <- oauth2.0_token(oauth_endpoints("google"), myapp,
                           scope = "https://www.googleapis.com/auth/fusiontables",
                           type= "offline",
                           use_oob = FALSE,
                           cache = TRUE)  

非常感谢有关如何检索刷新令牌的任何指导。

更新:使用以下代码返回一个字符串,其中包含 google_token$credentials。这是此处引用的授权代码吗:https ://developers.google.com/accounts/docs/OAuth2WebServer#offline

google_token <- oauth2.0_token(oauth_endpoints("google"), myapp,
                           scope = "https://www.googleapis.com/auth/fusiontables", 
                           type= "access_type='offline'",
                           use_oob = FALSE,
                           cache = TRUE)    

谢谢你。

4

1 回答 1

2

我在这里参加聚会有点晚了,但希望这对某人有所帮助。我上周发现了这个问题,因为我在同一个问题上苦苦挣扎。和你一样,我阅读了 API 文档并尝试了“oauth2.0_token()”函数的“类型”字段中的“离线”,但它弄乱了响应。我从 github 存储库下载了 httr 包源文件并查看了一下。经过一番挖掘,我找到了绕过它的方法。

如果您从这里修改 oauth-init 中的“authorize-url”变量:

authorize_url <- modify_url(endpoint$authorize, query = compact(list(
    client_id = app$key,
    scope = scope_arg,
    redirect_uri = redirect_uri,
    response_type = "code",
    state = state)))

对此:

authorize_url <- modify_url(endpoint$authorize, query = compact(list(
    client_id = app$key,
    scope = scope_arg,
    redirect_uri = redirect_uri,
    response_type = "code",
    state = state,
    access_type="offline")))

然后获取 oauth-token 和所有相关函数(包括 oauth-init),您将获得一个刷新令牌。出于某种原因,当 oauth_token 调用 init_oauth2.0 时,它没有传递“类型”参数。

这是一个令人讨厌的解决方法,我可能已经犯了一些罪,但它确实有效。你确实得到了一个刷新令牌。

于 2015-05-25T13:43:31.907 回答