r - 有没有办法在 R Shiny 应用程序加载时自动验证对 GoogleSheets 的访问? Googlesheets4 身份验证问题

标签 r shiny google-api google-sheets-api googlesheets4

我目前正在使用 R Shiny 应用程序,该应用程序利用 googlesheets4 从 GoogleSheet 读取数据。我认识到身份验证对于访问 GoogleSheets 非常重要,因此我尝试使用 app.R 文件中的以下代码对应用程序进行身份验证(出于隐私考虑,删除了电子邮件和 api key ):

  ### AUTHENTICATE FOR GOOGLE SHEETS ACCESS ###
  sheets_auth(
  email = "MY EMAIL",
  path = NULL,
  scopes = "https://www.googleapis.com/auth/spreadsheets",
  cache = gargle::gargle_oauth_cache(),
  use_oob = gargle::gargle_oob_default(),
  token = "MY API KEY"
  )

当我使用此代码在本地运行仪表板时,它首先加载一个网页,要求登录 Google 并验证 Tidyverse 的 API:screenshot of Tidyverse API.... 登录后,该应用程序会在单独的窗口中完美打开。

但是,我不希望用户在发布仪表板后使用它时必须进行任何身份验证。理想情况下,我希望在 Shiny 代码中包含必要的信息,以便应用程序能够自行验证对 GoogleSheet 的访问。

我对 googlesheets4 和一般 API 都很陌生,因此非常感谢将正确凭据添加到我的 app.R 文件中的所有指导。

谢谢!


更新...20.4.23

使用后https://gargle.r-lib.org/articles/non-interactive-auth.html#provide-a-service-account-token-directly

我几乎已经能够解决这个问题了。最后的障碍是在发布阶段,我在应用程序启动时收到此错误:

Error: .auth not found 我现在拥有的代码:

### AUTHENTICATE FOR GOOGLE SHEETS ACCESS ###
library(gargle)
library(googleAuthR)
library(searchConsoleR)
library(googledrive)
# Approach #1: use an option.
# Either specify the user:
options(gargle_oauth_email = "MY EMAIL")

# INSERT JSON FILE FROM GOOGLE API SERVICE ACCOUNT
drive_auth(path = "FTRjsonGoogleAPI.json")
options(gargle_quiet = FALSE)

最佳答案

对我有用的是将 token 保存在 .secrets 文件中,该文件在部署 Shiny 应用程序时上传。

代码是这样的:

library(googledrive)
library(googlesheets4)

# Google sheets authentification -----------------------------------------------
options(gargle_oauth_cache = ".secrets")
drive_auth(cache = ".secrets", email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c1b8aeb4b3a4aca0a8ad81a6aca0a8adefa2aeac" rel="noreferrer noopener nofollow">[email protected]</a>")
gs4_auth(token = drive_token())

您需要在本地运行一次才能登录。它将检查 .secrets 文件并读取它或要求您登录并存储 token 。然后可以将此 .secrets 文件与应用程序的其余部分一起上传。

关于r - 有没有办法在 R Shiny 应用程序加载时自动验证对 GoogleSheets 的访问? Googlesheets4 身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61375368/

相关文章:

python - 错误谷歌 API : "Credentials in post body and basic Authorization header do not match"

objective-c - 用 canShowCallout 切换 viewController 的注解

r - 将数据框列中的特定值按列与向量相乘

r - 通过表达式生成时如何在ggplot2中对齐标题和副标题

r - 两个选项卡中的传单输出 : LeafletProxy() doesn't render initially in 2nd tab

javascript - Google 的 API javascript 示例中的脚本 async/defer/onload 用法

r - 如何在 Tikz 简单流程图中包含 .eps 图?

r - 为 r 中的每个变量按组汇总表中的数据

R Shiny : Keep/retain values of reactive inputs after modifying selection

R + Shiny : Save Uploaded Dataset to List/choose from list item to view