Я изменил ответ, указанный в здесь , чтобы написать очень простую систему входа / выхода из системы, используя пакет Shiny в R. Я хотел бы скрыть панель "B", если USER $ Logged - FALSE (т. Е. Пользователь вышел из системы) и показывает его, когда USER $ Logged - TRUE (т. Е. Пользователь вошел в систему). Другими словами, после запуска кода он не должен отображать панель B, пока пользователь не введет правильно имя пользователя и пароль. Я пытался использовать conditionalPanel, но она не скрывает панель B. В настоящее время она отображается постоянно, независимо от USER $ Logged. Кто-нибудь знает как это исправить?
library(shiny)
library(shinydashboard)
my_username <- "test"
my_password <- "abc"
shinyApp(
shinyUI(
navbarPage( tabPanel("A", uiOutput('loginpage')),
tabPanel("B", uiOutput('page1'),conditionalPanel(condition = "output.cond1==TRUE"))
)
),
shinyServer(function(input, output, session) {
USER <<- reactiveValues(Logged = FALSE)
observe({
if (USER$Logged == FALSE) {
output$loginpage <- renderUI({
box(title = "",textInput("userName", "Username"),
passwordInput("passwd", "Password"),
br(),
actionButton("Login", "Log in"))})
} else if (USER$Logged == TRUE) {
output$loginpage <- renderUI({fluidPage(
box(title = "",br(),br(),actionButton("logout", "Logout"))
)
})
}
})
observeEvent(input$Login, {
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
}
}
}
}
})
observeEvent(input$logout, {
USER$Logged <<- FALSE
})
output$cond1 = reactive({
USER$Logged==TRUE
})
} ))