1

我有一个交互式闪亮应用程序,它想要读取和写入用户自己的 Google Drive 帐户。它正在使用gs4_create,gs4_findrange_read来自包googlesheets4googledrive.

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

googledrive 软件包正在请求访问您的 Google 帐户。选择预授权账户或输入“0”以获取新令牌。按 Esc/Ctrl + C 中止

1:notmyemail@gmail.com

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

当我将应用程序部署到 shinyapps.io 时,它会在首次使用这些功能时引发错误,甚至无需请求凭据:

值错误[3L]:无法获取 Google 凭据。您是否在非交互式会话中运行 googledrive?考虑:drive_deauth() 防止尝试获取凭据。Call drive_auth() 直接与所有必要的细节。阅读更多内容:https ://gargle.r-lib.org/articles/non-interactive-auth.html

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

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

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

有任何想法吗?谢谢。

4

2 回答 2

0

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

如果您没有正确设置它,包括重定向 url,如果应用程序部署在网络服务器上,重定向不应该是 localhost。

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

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

参考:

于 2020-05-22T08:44:31.750 回答
0

我在github上询问了这个googlesheets4包的开发者,回答说shiny中的多用户认证还没有实现。此处正在跟踪该问题:https ://github.com/r-lib/gargle/issues/14

于 2020-09-02T11:21:40.970 回答