You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用访问令牌控制侧边栏菜单项显示/隐藏的问题排查

Shiny侧边栏条件菜单认证问题修复

核心问题

  1. 你在conditionalPanel里用了input.token,但UI里根本没定义这个输入控件,服务器端的updateCheckboxInput也是在更新一个不存在的元素,导致条件判断完全失效。
  2. 原始UI存在两处语法错误:dashboardHeader后面多了一个多余的闭合括号;menuItem("Local Health Jurisdictions")没有正确闭合括号,这会直接导致应用无法正常加载。
  3. 认证逻辑里用updateCheckboxInput传递令牌文本的思路不对,应该跟踪是否认证成功的状态,而非令牌内容。

修复后的完整代码

# 加载必要包
library(shiny)
library(shinydashboard)

# Define UI --------------------
ui <- dashboardPage(
  dashboardHeader(title = "Health Portal", titleWidth = 400), # 修复多余括号问题
  dashboardSidebar(id = "Directory",
                   sidebarMenu(
                     menuItem("Home", tabName = "HME"),
                     conditionalPanel(
                       condition = "input.auth_status === true", # 改为判断认证状态
                       menuItem("Data", tabName = "surv")
                     ),
                     menuItem("Health & Prevention", tabName = "SHP"),
                     menuItem("Local Health Jurisdictions", tabName = "LHJs"), # 修复未闭合括号问题
                     menuItem("Outbreak", tabName = "Outbreak"),
                     textInput("access_token", "Access Token:"),
                     actionButton("authenticate", "Authenticate"),
                     # 添加隐藏的认证状态控件
                     hidden(checkboxInput("auth_status", "认证状态", value = FALSE))
                   )
  ),
  dashboardBody() # 补充dashboardBody,否则UI结构不完整
)

# Define Server Logic ----
server <- function(input, output, session){
  
  access_tokens <- c("token1")
  
  observeEvent(input$authenticate, {
    if(input$access_token %in% access_tokens) {
      updateTextInput(session, "access_token", value = "")
      updateActionButton(session, "authenticate", label = "Authenticated", disabled = TRUE)
      # 更新隐藏的认证状态为TRUE
      updateCheckboxInput(session, "auth_status", value = TRUE)
    } else {
      showModal(modalDialog(
        title = "Authentication Failed",
        "Invalid access token. Please try again.",
        easyClose = TRUE
      ))
    }
  })
}

# Deploy App ----
shinyApp(ui = ui, server = server)

修复说明

  • 补全了dashboardBody(),这是dashboardPage必需的结构元素。
  • 添加了隐藏的auth_status复选框,用来跟踪用户是否认证成功,conditionalPanel通过这个控件的状态来显示/隐藏菜单。
  • 修复了UI中的两处语法错误,确保应用能正常启动。
  • 认证成功后更新auth_status为TRUE,触发条件面板显示"Data"菜单项。

内容的提问来源于stack exchange,提问作者XaiXai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:42:49