首页 > 解决方案 > shinyapps.io 上的 rdrop2 - 身份验证不起作用

问题描述

为了能够持久地存储在 Shinyapps.io 上创建的数据,我决定通过 rdrop2 使用 Dropbox。但是,我有一个问题:rdrop2 每次都希望通过浏览器从 Dropbox 进行手动身份验证。

我的计划是通过 dropkey.rds 拦截它。

所以我通过PC本地浏览器完成了身份验证,保存了dropkey.rds,为了安全起见,把它放在我的www文件夹和相应脚本所在的目录和“项目顶部文件夹”中”。只是为了让函数可以确定地找到 dropkey.rds。

不幸的是,它不起作用。即使在本地,脚本也会要求我进行身份验证(至少在我第一次运行它时)。在 Shinyapps 中,程序只是崩溃,因为这里没有浏览器可以打开。

如何绕过 Shinyapps.io 中的身份验证?

您可以在文章末尾找到一些代码摘录。谢谢!!!

最好的祝福


代码摘录:

  token <- readRDS("droptoken.rds")
  drop_acc(dtoken = token)
  
  drop_upload(Pn, path = "test")

(Pn 只是应该上传的 png 的路径)

登录 Shinyapps.io

正在浏览器中等待身份验证... 2021-10-15T10:21:44.490437+00:00 shinyapps[48xxxxx]:按 Esc/Ctrl + C 中止 2021-10-15T10:21:44.491678+00:00 shinyapps[48xxxxx] ]: https://www.dropbox.com/oauth2/authorize?client_id=mxxxxxx2w&redirect_uri=xxxx 2021-10-15T10:21:44.491610+00:00 shinyapps[48xxxxxx]: 请将您的浏览器指向以下网址:

标签: rshinydropboxshinyappsrdrop2

解决方案


小更新:

我能够解决这个问题。解决方案如下所述

为了让未来的读者更加清楚,对于一个闪亮的应用程序,您应该将您的令牌包含为 RDS,然后

使用 global.R 或 server.R 顶部的 drop_auth(rdstoken = "tokenfile.rds") 等令牌进行身份验证,然后正常调用其他 drop_() 函数(不使用 dtoken arg)不调用 drop_auth(),从 RDS 文件中将令牌读入 R,然后通过dtoken arg 将该令牌对象传递给每个 drop_ () 函数我认为第一个选项要好得多(我就是这样做的),但第二个应该仍然可行.

将身份验证放在 server.R 的顶部(对于工作人员来说,ui.R :D)为我解决了这个问题。请注意,您希望在脚本中使用以下 rdrop2 命令,而无需再次调用 auth 或 rds 文件!:)


推荐阅读