【发布时间】:2020-08-22 10:38:26
【问题描述】:
我正在尝试使用此 example 的更新版本通过闪亮连接到私人 googlesheet,并将此应用程序部署在 shinyapps.io 服务器上。用户无需对 google 帐户进行身份验证,因为该应用使用指定的预先存在的 googlesheet。
我已经关注了这个example(部分复制到这里),试图将令牌保存到我闪亮的应用程序中:
# previous googlesheets package version:
shiny_token <- gs_auth() # authenticate w/ your desired Google identity here
saveRDS(shiny_token, "shiny_app_token.rds")
但尝试将其更新为 googlesheets4,如下所示:
ss <- gs4_get("MY GOOGLE DOC URL") # do the authentication once, manually.
ss
gs4_has_token() # check that the token exists
# get token
ss_token <- gs4_token()
# save the token
save(ss_token, file = "APP PATH ... /data/tk.rdata")
然后在应用中,我把这段代码放在shinyApp()函数之外。
load("data/tk.rdata")
googlesheets4::gs4_auth(token = ss_token, use_oob = T)
在应用程序中,我使用从应用程序获得的硬编码 id 从应用程序连接到谷歌文档
ss$spreadsheet_id 以上。该应用程序在本地运行。
尝试将应用程序部署到服务器后,我收到错误“...无法获取 google 凭据。您是否在非交互式会话中运行 googlesheets4?...等”我认为令牌将包含足够的信息。
如果有人可以为我提供设置指南,并评论这种方法(在 shinyapps.io 上保存令牌)是否安全,我将不胜感激?
我查看了其他示例,但似乎大多数是针对以前版本的 googlesheets
【问题讨论】:
-
令牌的生成应该只进行一次。
-
是的,我生成了一次,然后保存下来,想永久使用它进行身份验证
-
您可以尝试使用googleAuthR package。我认为闪亮的身份验证尚未在 gargle 中正确实施(googlesheets4 使用)。
-
谢谢。阅读这个包和漱口的文档,我需要非交互式访问来进行上述使用,似乎推荐的方式是通过服务帐户令牌。我已经尝试过,在google平台上创建一个项目,激活所需的API,并下载服务帐户json,并将其传递给
gs4_auth()函数,但仍然没有成功。
标签: r shiny google-sheets-api googlesheets4