部署到 shinyapps.io 的应用上的 googlesheets 多用户身份验证

Multi-user authentication for googlesheets on an app deployed to shinyapps.io

我有一个交互式 shiny 应用程序,它想读取和写入用户自己的 Google 云端硬盘帐户。它使用包 googlesheets4googledrive.

中的 gs4_creategs4_findrange_read

当 运行 在本地时,我在第一次使用这些包时依次通过控制台收到这样的提示:

The googledrive package is requesting access to your Google account. Select a pre-authorised account or enter '0' to obtain a new token. Press Esc/Ctrl + C to abort

1: notmyemail@gmail.com

我可以只select我的gmail账号或者输入0打开“选择一个账号 继续在浏览器中使用 Tidyverse API Packages" GUI。这两种方法都可以 (OAuth) 对用户进行身份验证,并且这些功能都可以正常工作。

当我将应用程序部署到 shinyapps.io 时,它在第一次使用这些功能时抛出错误,甚至没有请求凭据:

Error in value[3L] : Can't get Google credentials. Are you running googledrive in a non-interactive session? Consider: drive_deauth() to prevent the attempt to get credentials. Call drive_auth() directly with all necessary specifics. Read more in: https://gargle.r-lib.org/articles/non-interactive-auth.html

显然,我不是在寻找已部署应用程序的控制台请求,但我认为我需要的是让 Tidyverse API GUI 触发(我认为这是预期的行为)和使用户能够验证他们的帐户?

请注意 (i) 此应用程序是交互式的,(ii) 用户正在寻求访问他们自己的 Google 驱动器上的私人文件,而不是公共文件或 public 文件。由于这两个原因,我不能只提供令牌。

drive_auth_config 的文档指出我可以设置自己的 OAuth 应用程序来进行身份验证,但这有必要吗?

有什么想法吗?谢谢。

您的应用需要 凭据 才能访问您启用的 API 范围。此外,使用您的应用程序的用户在同意您的应用程序代表他们访问 API 之前,首先需要进行身份验证。这意味着您的应用程序应该有一个同意屏幕显示给您的用户,其中显示它正在请求许可的 API 范围。

如果您没有正确设置,包括重定向 URL,如果应用程序部署在网络服务器上,则重定向不应是本地主机。

因此,正确设置项目的同意屏幕并使用正确的凭据非常重要。

我建议您阅读以下文档,以更好地了解如何为您的应用设置身份验证。

参考文献:

我询问了 github 和 googlesheets4 包的开发者,回答说 multi-user shiny 中的身份验证尚未实现。正在此处跟踪问题:https://github.com/r-lib/gargle/issues/14