【问题标题】:Authenticating google sheets on AWS Ubuntu without browser在没有浏览器的情况下在 AWS Ubuntu 上验证谷歌表格
【发布时间】:2016-07-18 10:20:02
【问题描述】:

我在 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 服务器。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      从服务器创建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 令牌。通过在oauth2.0_token 命令中设置use_oob=TRUE 使用带外认证模式。

      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 令牌,然后将文件复制到服务器。

      【讨论】:

      • 这对我帮助很大。谢谢!
      • 我刚刚找到了这个,它解决了我在远程 Debian 机器上设置类似的问题,感谢@user1980554。我注意到的一件事是 oauth 文件位于 R 的工作目录中,当您在脚本中运行 googlesheets 操作时,您需要确保您位于同一目录中。我决定在创建 oauth 文件之前setwd("/"),然后在我的脚本中添加setwd("/"),就在任何googlesheets 操作之前。
      • 我一直在为 Google Analytics 处理类似的问题,在尝试了您的答案后,我忍不住大声喊叫。谢谢大佬!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 2016-07-23
      • 2015-09-14
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多