Connettiti a googlesheets tramite shiny in R con googlesheets4
Sto cercando di utilizzare una versione aggiornata di questo esempio per connettermi a un googlesheet privato tramite shiny e distribuire questa app sul server shinyapps.io. L'utente non è tenuto ad autenticarsi con un account Google poiché l'app utilizza un foglio Google preesistente specificato.
Ho seguito questo esempio (in parte copiato qui), tentando di salvare il token nella mia brillante app:
# previous googlesheets package version:
shiny_token <- gs_auth() # authenticate w/ your desired Google identity here
saveRDS(shiny_token, "shiny_app_token.rds")
ma ho provato ad aggiornarlo a googlesheets4, in questo modo:
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")
Quindi nell'app ho inserito questo codice al di fuori della shinyApp()
funzione.
load("data/tk.rdata")
googlesheets4::gs4_auth(token = ss_token, use_oob = T)
Nell'app, mi collego a un documento Google dall'app, utilizzando un ID hardcoded ottenuto ss$spreadsheet_id
dall'alto. L'app funziona localmente.
Dopo aver tentato di distribuire l'app sul server, viene visualizzato l'errore "...Impossibile ottenere le credenziali di Google. Stai eseguendo googlesheets4 in una sessione non interattiva?... ecc." Ho pensato che il token contenesse informazioni sufficienti per questo.
Sarei grato se qualcuno potesse indicarmi una guida per configurarlo e anche commentare se questo approccio (salvare un token su shinyapps.io) è sicuro?
Ho esaminato altri esempi, ma sembra che la maggior parte siano per la versione precedente digooglesheets
Risposte
Basta seguire le istruzioni in questo link:
# designate project-specific cache
options(gargle_oauth_cache = ".secrets")
# check the value of the option, if you like
gargle::gargle_oauth_cache()
# trigger auth on purpose to store a token in the specified cache
# a broswer will be opened
googlesheets4::sheets_auth()
# see your token file in the cache, if you like
list.files(".secrets/")
# sheets reauth with specified token and email address
sheets_auth(
cache = ".secrets",
email = "youremail"
)