4

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

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

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

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

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

  2. 在这篇文章之后gs4_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。

关于我可能遗漏的任何想法?该应用程序在本地运行良好。

任何帮助表示赞赏。谢谢!

4

1 回答 1

4

已使用此(已关闭)Github 问题中确定的方法解决了此问题。

关键是完全按照以下步骤操作:

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

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

正如 Github 讨论中所指出的,包括use_oob = TRUE可能不是必需的。此外,漱口水网站上的非交互式身份验证文章中详细介绍了这种方法。

于 2020-09-07T21:29:59.780 回答