2015-03-11 13 views
22

So che in Shiny Server Pro esiste una funzione di controllo della password. La questione è che la Shiny ha funzione passwordInput(), che è come textInput() Qualcuno ha pensato a come effettuare le seguenti operazioni:Avvio dell'app Shiny dopo l'immissione della password

1) Avvio dell'applicazione solo dopo aver corretto inserimento della password 2) Avvio da parte della applicazione dopo l'inserimento corretto della password (ad esempio, ho alcune schede in shinydashboard e voglio accedervi solo con una password)

Grazie!

risposta

32

Ho intenzione di rispondere al n. 1 e al n. 2 potete semplicemente espandere il mio esempio. Seguendo questo esempio Encrypt password with md5 for Shiny-app. è possibile effettuare le seguenti operazioni:

1) Creare 2 pagine e se l'utente immette il nome utente e la password si può renderUI e utilizzare htmlOutput per uscita corretta la pagina 2) È possibile lo stile la posizione della casella con nome utente e password con tags come ho fatto e colorarli se si desidera utilizzare anche tags$style

È quindi possibile esaminare ulteriormente la pagina effettiva e specificare cosa deve essere creato come risultato di utenti diversi. È anche possibile guardare in JavaScript Popup Boxes

EDIT 2018: hanno anche uno sguardo alla esempio qui https://shiny.rstudio.com/gallery/authentication-and-database.html

Example of front page

rm(list = ls()) 
library(shiny) 

Logged = FALSE; 
my_username <- "test" 
my_password <- "test" 

ui1 <- function(){ 
    tagList(
    div(id = "login", 
     wellPanel(textInput("userName", "Username"), 
        passwordInput("passwd", "Password"), 
        br(),actionButton("Login", "Log in"))), 
    tags$style(type="text/css", "#login {font-size:10px; text-align: left;position:absolute;top: 40%;left: 50%;margin-top: -100px;margin-left: -150px;}") 
)} 

ui2 <- function(){tagList(tabPanel("Test"))} 

ui = (htmlOutput("page")) 
server = (function(input, output,session) { 

    USER <- reactiveValues(Logged = Logged) 

    observe({ 
    if (USER$Logged == FALSE) { 
     if (!is.null(input$Login)) { 
     if (input$Login > 0) { 
      Username <- isolate(input$userName) 
      Password <- isolate(input$passwd) 
      Id.username <- which(my_username == Username) 
      Id.password <- which(my_password == Password) 
      if (length(Id.username) > 0 & length(Id.password) > 0) { 
      if (Id.username == Id.password) { 
       USER$Logged <- TRUE 
      } 
      } 
     } 
     } 
    }  
    }) 
    observe({ 
    if (USER$Logged == FALSE) { 

     output$page <- renderUI({ 
     div(class="outer",do.call(bootstrapPage,c("",ui1()))) 
     }) 
    } 
    if (USER$Logged == TRUE) 
    { 
     output$page <- renderUI({ 
     div(class="outer",do.call(navbarPage,c(inverse=TRUE,title = "Contratulations you got in!",ui2()))) 
     }) 
     print(ui) 
    } 
    }) 
}) 

runApp(list(ui = ui, server = server)) 
+1

Perché si utilizza '<< -' 'per UTENTE << - reactiveValues (Loggato = Loggato) '? Penso che abbastanza reattivo '<-' – Batanichek

+0

@Batanichek Penso che al momento ho seguito qualche esempio, l'ho cambiato, grazie –

+0

Ciao @Pork Chop, grazie per questo fantastico esempio! Ho funzionato molto bene. Vorrei chiederti se esiste un modo per stampare l'ID quando gli utenti chiudono l'applicazione. Pensavo potessi sapere questo :)? Grazie mille. –

Problemi correlati