我目前正在使用 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/