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

如何授权Shiny-App仅访问Dropbox指定单个文件夹?

这个需求非常合理——默认用rdrop2生成的.httr-oauth确实会给Shiny App整个Dropbox的访问权限,要实现单文件夹权限限制,核心是在Dropbox开发者平台创建仅访问专属App文件夹的应用,具体操作步骤如下:

1. 在Dropbox开发者平台创建限定权限的应用
  • 登录Dropbox开发者控制台,点击「Create app」按钮
  • 选择「Scoped access」(限定范围访问)选项
  • 关键选择:这里一定要选App folder而不是「Full Dropbox」——这个选项会自动为你的应用生成一个独立的专属文件夹,Shiny App只能访问这个文件夹内的内容,完全隔离其他Dropbox文件
  • 填写应用名称(比如ShinyApp_Storage),完成创建流程
2. 配置rdrop2生成专属权限的认证文件
  • 在刚创建的应用详情页面,找到「App key」和「App secret」,把这两个值复制下来
  • 在本地R环境中,用rdrop2生成仅针对这个App的认证:
    library(rdrop2)
    
    # 替换成你的App key和secret
    custom_auth <- drop_auth(
      key = "你的App Key",
      secret = "你的App Secret",
      cache = FALSE  # 避免缓存全局认证
    )
    
    # 将认证对象保存为独立文件,比如命名为`dropbox_app_auth.rds`
    saveRDS(custom_auth, "dropbox_app_auth.rds")
    
  • 这个dropbox_app_auth.rds就是你要用到的专属认证文件,它只会让Shiny App访问那个指定的App文件夹,不会触及Dropbox的其他内容
3. 在Shiny App中加载专属认证并使用
  • 在你的Shiny App代码里,不要依赖默认的.httr-oauth,而是加载刚才保存的专属认证文件:
    library(shiny)
    library(rdrop2)
    
    # 加载专属权限的认证
    app_auth <- readRDS("dropbox_app_auth.rds")
    
    # 后续使用rdrop2函数时,指定这个认证对象即可
    # 示例:列出App文件夹下的文件
    folder_contents <- drop_dir(auth = app_auth)
    
    # 示例:上传本地文件到App文件夹
    drop_upload("data.csv", auth = app_auth)
    
额外注意事项
  • 绝对不要把dropbox_app_auth.rds、App key或App secret上传到公开代码仓库(比如GitHub),可以用Shiny Server的环境变量或者保密配置功能来管理这些敏感信息
  • 如果之前你的项目里有默认的.httr-oauth文件,记得把它移除,避免认证冲突
  • 当使用App folder权限时,所有rdrop2的操作默认都是在这个专属文件夹下进行的,你也可以在这个文件夹内创建子文件夹来进一步细分存储内容

内容的提问来源于stack exchange,提问作者armtar

火山引擎 最新活动