使用 googlesheets4 通过 Shiny 应用程序授权对 googlesheets 的非交互式使用

pha*_*man 5 r google-sheets shiny googlesheets4

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

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

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

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

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

  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。

关于我可能会缺少什么的任何想法?该应用程序在本地运行良好。

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

pha*_*man 4

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

关键是严格遵循以下步骤:

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

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

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