1

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

  ### 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:Tidyverse API 的屏幕截图...。 在我登录后,该应用程序完美地在一个单独的窗口中打开。

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

我对 googlesheets4 和一般的 API 非常陌生,因此非常感谢有关将正确凭据放入我的 app.R 文件的任何和所有指导。

谢谢!


更新...4.23.20

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

我几乎可以解决这个问题。最后一个障碍是在发布阶段,我在应用启动时收到此错误:

错误:.auth 没有找到 我现在拥有的代码:

### 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)
4

1 回答 1

0

对我有用的是将令牌保存在部署闪亮应用程序时上传的 .secrets 文件中。

代码是这样的:

library(googledrive)
library(googlesheets4)

# Google sheets authentification -----------------------------------------------
options(gargle_oauth_cache = ".secrets")
drive_auth(cache = ".secrets", email = "youremail@gmail.com")
gs4_auth(token = drive_token())

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

于 2021-02-13T13:43:29.270 回答