Dopo aver provato la valutazione del server Riny Shiny Pro, non sono entusiasta del meccanismo di accesso/autenticazione in quanto non è un semplice meccanismo per gestire gli account utente per consentire ai client di accedere a un'app lucida.R hack login lucido
Come tale sto tentando di creare il mio meccanismo di login all'interno di Shiny che a tutti gli effetti funziona bene, a parte la visualizzazione di cose all'interno del framework shinydashboard
. Le cose sembrano interrotte prima che venga visualizzato tutto il contenuto. Il mio codice di accesso è leggermente ammendato a https://gist.github.com/withr/9001831, quindi grazie mille.
Il mio codice:
require(shiny)
require(shinydashboard)
my_username <- "test"
my_password <- "abc"
header <- dashboardHeader(title = "my heading")
sidebar <- uiOutput("sidebarpanel")
body <- uiOutput("body")
login <- box(title = "Login",textInput("userName", "Username"),
passwordInput("passwd", "Password"),
br(),actionButton("Login", "Log in"))
mainpage <- "some data"
ui <- dashboardPage(header, sidebar, body)
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
}
}
}
}
}
})
output$sidebarpanel <- renderUI({
if (USER$Logged == TRUE) {
dashboardSidebar(
sidebarUserPanel("myuser",subtitle = a(icon("user"), "Logout", href="__logout__")),
selectInput("in_var", "myvar", multiple = FALSE,
choices = c("option 1","option 2")),
sidebarMenu(
menuItem("Item 1", tabName = "t_item1", icon = icon("line-chart")),
menuItem("Item 2", tabName = "t_item2", icon = icon("dollar")),
menuItem("Item 3", tabName = "t_item3", icon = icon("credit-card")),
menuItem("Item 4", tabName = "t_item4", icon = icon("share-alt"))
))}
})
output$body <- renderUI({
if (USER$Logged == TRUE) {
dashboardBody(mainpage)
}
else {
dashboardBody(login)
}
})
}
shinyApp(ui, server)
Quando carico l'applicazione sembra che questo:
Se poi ridimensionare leggermente lo schermo si fissa.
Ogni pensiero su come evitare il comportamento iniziale di strano sarebbe molto apprezzato ..
idem sulla domanda "è sicuro utilizzare questo tipo di autenticazione di accesso". Ho implementato qualcosa di simile, ma con sale e pepe per la password dell'utente, anche se non sono sicuro se questo potrebbe essere facilmente violato. Non esiste inoltre uno stato di accesso salvato, quindi se l'utente aggiorna lo schermo, sarà necessario accedere nuovamente. –
FYI, non è sicuro usare questo genere di cose. Vorrei suggerire di aggiungere PAM sul tuo server lucido –
Grazie per l'informazione. PAM sembra funzionare solo con la versione Pro di Shiny. C'è qualche altra alternativa sicura compatibile con la versione gratuita di Shiny? – Geovany