部署关联Google Drive的R-Shiny应用至shinyapps.io凭证报错如何解决
报错根因
你遇到的报错:
Error: Can't get google credentials
Are you runing googledrive in a non-interactive session? Consider:
drive_deauth() or drive_auth()...
本质原因是shinyapps.io属于非交互式运行环境,无法触发本地运行时的浏览器跳转授权流程:
drive_deauth()仅支持访问公开共享的Google Drive文件,你个人的私有文件未授权的情况下调用就会返回403错误- 普通
drive_auth()默认走交互式授权逻辑,在无浏览器的部署环境下无法完成授权校验
最简解决步骤
- 第一步:本地交互式环境下运行授权代码,生成缓存凭证
本地R控制台运行如下代码,按照提示跳转浏览器完成Google账号授权,授权成功后会在当前目录生成.secrets缓存文件夹:library(googledrive) # 替换为你的谷歌账号邮箱 drive_auth(cache = ".secrets", email = "your.google.account@gmail.com") # 验证授权正常,能找到目标文件即可 drive_find("CST_Tree.csv") - 第二步:将
.secrets文件夹移动到你的Shiny应用根目录,和app.R放在同一层级,部署shiny应用时要选中该文件夹一起上传到shinyapps.io - 第三步:替换你原有应用中的googledrive相关代码:
library(googledrive) # 直接读取缓存的授权凭证,非交互环境下无需额外操作 drive_auth(cache = ".secrets", email = "your.google.account@gmail.com", use_oob = TRUE) drive_download( "CST_Tree.csv", # 注意shinyapps.io为类Unix环境,不要用Windows反斜杠路径,直接用相对路径即可 path = "./CST_Tree.csv", overwrite = TRUE ) df <- read.csv("CST_Tree.csv")
可选非公开方案
如果你不想将目标CST_Tree.csv设置为公开可访问,可以使用谷歌云服务账号授权:
- 在谷歌云控制台创建服务账号,下载json格式的密钥文件
- 在你的Google Drive中,给该服务账号的邮箱地址开放CST_Tree.csv的查看权限
- 将密钥文件放到Shiny应用根目录,替换授权代码为:
drive_auth(path = "./你的服务账号密钥文件名.json")
内容的提问来源于stack exchange,提问作者S44
相关产品推荐
相关产品推荐

