首页 文章

只需要登录Shiny app的一个部分

提问于
浏览
2

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

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

我的想法是创建两个单独的应用程序,"Download"按钮链接到第二个应用程序 . 但是,这需要在第一个应用程序中输入"remember"下载请求输入 . This question类似,但我没有使用Rmarkdown .

我已经看到的解决如何链接Shiny应用程序的问题通常得出结论,你应该将源代码分开并从另一个文件中调用所有内容(使其成为单个应用程序),但shinyapps.io应用程序只能在整个级别上使用require authentication应用程序,所以组合它们是行不通的 .

所以我想我正在寻找以下任一选项的建议:

1)限制对应用程序的一个部分的身份验证 . 现在,我可能的开源Shiny服务器授权工具(尚未设置)将是auth0,但如果使用Shiny Server Pro进行部分身份验证,那么我的组织可能愿意升级到Pro .

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

预先感谢您的任何帮助!

1 回答

  • 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)
    

相关问题