【问题标题】:Authorizing non-interactive use of googlesheets through Shiny app using googlesheets4使用 googlesheets4 通过 Shiny 应用程序授权非交互式使用 googlesheets
【发布时间】:2020-12-21 06:29:14
【问题描述】:

我知道 SO 周围还有其他一些类似的问题(例如,herehere),但我想我会再试一次,因为其他人没有得到很多答案。

我有一个 Shiny 应用程序,它允许其用户通过应用程序提供输入,但这些用户需要跳过身份验证步骤。在googlesheets 的先前版本中,我将表格公开(对知道链接的任何人)并避免了一些身份验证过程。在更新到 googlesheets4 时,我在将更新的应用程序部署到 shinyapps.io 时遇到了权限问题。这是我尝试过的内容的摘要,以及我得到的结果。任何指针将不胜感激。

首先,根据this gargle article 中的建议,我创建了一个服务帐户,下载了一个 JSON 服务帐户令牌(格式为“project-name-12345678abc1.json”),并将其(暂时)保存在父级中app 文件夹,假设它需要与 app bundle 一起上传。然后我启用了 Google Sheets API。

我已将以下命令放在应用程序的前面,放在任何实质性内容之前:

  1. gs4_deauth(),因为 google 表格对知道链接的任何人都是公开的,因此可能不需要令牌。

  2. Following this articlegs4_auth(path = "project-name-12345678abc1.json")。我还添加了scopes 参数(如下)和use_oob=TRUE

  3. credentials_service_account(scopes = "https://www.googleapis.com/auth/spreadsheets", path = "project-name-12345678abc1.json").

  4. credentials_app_default(path = "project-name-12345678abc1.json")

结果

大多数组合都给我错误提示“无法获取 Google 凭据”,然后建议我查看漱口网站上的非交互式文章。一个例外是尝试 3,它提供了以下错误消息 - 奇怪的是:

警告:错误:客户端错误:(403) PERMISSION_DENIED

  • 客户端没有足够的权限。这可能是因为 OAuth 令牌没有正确的范围,客户端没有 权限,或尚未为客户端项目启用 API。

对我可能遗漏的内容有什么想法吗?该应用程序在本地运行良好。

感谢任何帮助。谢谢!

【问题讨论】:

    标签: r google-sheets shiny googlesheets4


    【解决方案1】:

    已使用this (closed) Github issue 中确定的方法解决了此问题。

    关键是完全按照以下步骤进行:

    1. 调用gs4_auth(cache = ".secrets")一次,在浏览器中本地运行应用程序。
    2. 将上面的行替换为gs4_auth(cache = ".secrets", email = TRUE, use_oob = TRUE)
    3. 将应用部署到 shinyapps。

    我还清除了以前保存的令牌,这可能很重要,但很难知道。

    正如 Github 讨论中所述,包括 use_oob = TRUE 可能没有必要。此外,漱口水网站上的non-interactive auth 文章详细介绍了这种方法。

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 1970-01-01
      • 2019-01-12
      • 2020-10-27
      • 1970-01-01
      • 2016-02-27
      • 2016-11-25
      • 2011-02-10
      • 2022-12-01
      相关资源
      最近更新 更多