You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于使用R pins包的board_gdrive()时避免Google Drive手动身份验证的技术咨询

使用R pins包的board_gdrive()时避免Google Drive手动身份验证的技术咨询

你好!要解决Shiny应用中使用board_gdrive()时需要手动Google Drive认证的问题,核心是使用Google Cloud服务账号进行无交互认证,这样服务器就能自动完成身份验证,不需要手动干预。下面是具体的实现步骤和代码:

步骤1:创建并配置Google Cloud服务账号

  • 登录Google Cloud控制台,创建一个新项目(或使用现有项目)。
  • 在"IAM与管理" > "服务账号"页面,创建新的服务账号,记录下服务账号的邮箱地址(后续需要给这个邮箱共享Drive文件夹权限)。
  • 点击服务账号的"密钥"选项卡,添加密钥 > 创建新密钥,选择JSON格式,下载密钥文件到本地(妥善保管,不要泄露)。

步骤2:给服务账号分配Drive文件夹权限

  • 打开你的目标Google Drive文件夹,点击"共享"按钮,将步骤1中得到的服务账号邮箱添加为成员,根据需求赋予"查看者"或"编辑者"权限。

步骤3:修改R/Shiny代码实现无交互认证

你可以通过两种方式实现认证,任选其一即可:

方式一:通过环境变量指定密钥(推荐)

# 设置环境变量指向服务账号密钥文件(注意路径要正确,部署时需确保服务器能访问到该文件)
Sys.setenv("GOOGLE_APPLICATION_CREDENTIALS" = "path/to/your/service-account-key.json")

# 无交互初始化Google Drive认证
googledrive::drive_auth(service_account = TRUE)

# 创建Google Drive board
board <- pins::board_gdrive(googledrive::as_id("https://drive.google.com/drive/folders/my-folder-abc123"))

方式二:直接在board_gdrive中指定认证参数

board <- pins::board_gdrive(
  board_id = googledrive::as_id("https://drive.google.com/drive/folders/my-folder-abc123"),
  auth = googledrive::drive_auth(
    service_account = TRUE,
    path = "path/to/your/service-account-key.json"
  )
)

注意事项

  • 密钥文件包含敏感信息,不要上传到公开版本控制系统(比如GitHub),可以将其添加到.gitignore文件中。
  • 如果部署到Shiny托管平台(比如shinyapps.io),需要将密钥文件一同上传到服务器,或者在平台的环境变量设置中配置GOOGLE_APPLICATION_CREDENTIALS指向密钥文件的路径。
  • 确保服务账号的权限与你的需求匹配:如果只需要读取pin数据,赋予"查看者"权限即可;如果需要写入数据,则需赋予"编辑者"权限。

备注:内容来源于stack exchange,提问作者Ryan Garnett

火山引擎 最新活动