R shinymanager认证后无法移除Login tabPanel问题求助
问题解决方法
根因
你定义的reactive({...})是懒加载的响应式对象,仅当被其他响应式组件主动调用时才会执行内部代码。当前代码中该响应式对象未被任何位置引用,因此removeTab逻辑从未触发,Login标签页无法被移除。
修正方案
将孤立的reactive块替换为observeEvent,该函数会主动监听验证状态的变化,触发后自动执行移除标签页的逻辑,无需被其他组件调用。
修正后完整可运行代码如下:
library(shiny) library(shinymanager) # 凭证配置 credentials <- data.frame( user = c("test"), password = c(scrypt::hashPassword("test")), is_hashed_password = TRUE ) ui <- navbarPage( "Test project", id="main", tabPanel( "Login", auth_ui( id="auth", lan=use_language("fr") ) ), tabPanel( "Content", uiOutput("test") ) ) server <- function(input, output){ auth <- callModule( module = auth_server, id = "auth", check_credentials = check_credentials(credentials) ) # 监听验证成功事件,移除Login标签页 observeEvent(auth$result, { req(auth$result) removeTab( inputId = "main", target = "Login" ) }) output$test <- renderUI({ req(auth$result) tags$h1("Test") }) } shinyApp(ui=ui, server=server)
内容的提问来源于stack exchange,提问作者MattL
相关产品推荐
相关产品推荐

