2017-10-04 58 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) 
相關問題