2017-10-04 52 views
1

我有一个Shiny应用程序,主应用程序页面需要公开,但下载数据文件需要通过登录进行身份验证。理想情况下,用户可以选择下载参数(他们希望包含哪些变量等),并且不会要求他们登录,直到他们实际点击“下载”按钮。仅需登录Shiny应用程序的一个部分

我在这个主题上看到的每个问题都讨论了如何根据登录凭证制作不同的应用程序版本,但这些都需要初始登录,所以它们不适用。

我的想法是创建两个独立的应用程序,与“下载”按钮链接到第二个应用程序。但是,这需要“记住”在第一个应用程序中输入的下载请求输入。 This question是类似的,但我没有使用Rmarkdown。

问题我已经看到地址如何链接闪亮的应用程序通常会得出结论,您应该分开源代码并从另一个文件调用所有内容(使其成为单个应用程序),但shinyapps.io应用程序只能在require authentication整个应用程序的级别,所以将它们结合起来将不起作用。

所以我想我正在寻找提供任何建议以下选项:应用程序的

1)限制验证一节。目前,我的开源Shiny Server授权工具(尚未设置)将为auth0,但如果这种部分身份验证适用于Shiny Server Pro,那么我的组织可能愿意升级到Pro。

2)从一个应用程序(下载参数)提供输入到另一个应用程序(要求登录信息,然后返回下载文件)。

非常感谢您的帮助!

回答

1

您可以自己编写登录逻辑。这是一个简单的例子,可以用renderUI来完成。

library(shiny) 

ui <- fluidPage(
    tabsetPanel(
    tabPanel("public area", "Eveyone can see this!"), 
    tabPanel("login area", uiOutput("login_area")) 
) 
) 

server <- function(input, output, session){ 
    logged_in = reactiveVal(FALSE) 

    output$logged_in <- renderUI({"you are logged in"}) 

    output$not_logged_in <- renderUI({ 
    tagList(
     "you are not logged in", 
     actionButton("login", "Log me in!") 
    ) 
    }) 

    observeEvent(input$login, logged_in(TRUE)) 

    output$login_area <- renderUI({ 
    if (logged_in()) 
     uiOutput("logged_in") 
    else 
     uiOutput("not_logged_in") 
    }) 
} 

shinyApp(ui, server) 
相关问题