1

我在 AWS“Ubuntu Server 12.04.2”上运行 R Studio,并通过我的浏览器访问 R Studio。

当我尝试使用带有代码的 googlesheets 包对 google auth API 进行身份验证时: gs_auth(token = NULL, new_user = FALSE, key = getOption("googlesheets.client_id"), secret = getOption("googlesheets.client_secret"), cache = getOption("googlesheets.httr_oauth_cache"), verbose = TRUE)

这里的问题是它会将我重定向到本地机器(基于 Windows)的浏览器。即使我授权它,它也会重定向到像“ http://localhost:1410/?state=blahblah&code=blahblah ”这样的 URL。

在这种情况下如何授权 googlesheets?

我什至尝试从我的 Windows 机器转移现有的 httr-oauth 令牌以删除 ubuntu 服务器。

4

2 回答 2

7

从服务器创建gs_auth令牌的最简单方法是将httr_oob_default选项设置为 true,这将告诉 httr 使用带外方法进行身份验证。您将获得一个 URL,并期望返回一个授权码。

library(googlesheets)
options(httr_oob_default=TRUE)
gs_auth(new_user = TRUE)
gs_ls()

当您设置选项时,httr 所做的一件事httr_oob_default是将 URI 重新定义为oauth-initurn:ietf:wg:oauth:2.0:oob的代码中所见。

.httr-oauth或者,您可以使用 httr 命令手动创建令牌。use_oob=TRUE通过在oauth2.0_token命令中设置使用带外认证方式。

library(googlesheets)
library(httr)

file.remove('.httr-oauth')

oauth2.0_token(
  endpoint = oauth_endpoints("google"),
  app = oauth_app(
    "google", 
    key = getOption("googlesheets.client_id"), 
    secret = getOption("googlesheets.client_secret")
    ),
  scope = c(
    "https://spreadsheets.google.com/feeds", 
    "https://www.googleapis.com/auth/drive"),
  use_oob = TRUE,
  cache = TRUE
)

gs_ls()

另一个不太优雅的解决方案是.httr-oauth在桌面上创建令牌,然后将文件复制到服务器。

于 2016-04-02T01:57:33.370 回答
0

经过大量的头撞后,我发现一个支持 HTTP 处理和来自 R 的 WebSocket 请求的包“httpuv”正在产生问题。它迫使 R 打开网络浏览器。一旦我卸载了这个包,“googlesheets”给了我一个链接,我可以单独粘贴到浏览器中,然后将验证代码粘贴回 R 服务器。

于 2016-03-30T18:49:10.507 回答