在没有浏览器的情况下在AWS Ubuntu上验证Google表格

时间:2016-03-30 12:06:45

标签: r ubuntu ubuntu-12.04 httr r-googlesheets

我在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”这样的网址。

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

我甚至尝试从我的Windows机器上传输现有的httr-oauth令牌以删除ubuntu服务器。

2 个答案:

答案 0 :(得分:7)

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

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

设置httr_oob_default选项时httr做的一件事就是将URI重新定义为urn:ietf:wg:oauth:2.0:oob,如oauth-init的代码所示。

或者,您可以使用httr命令手动创建.httr-oauth令牌。通过在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令牌,然后将文件复制到服务器。

答案 1 :(得分:0)

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