如何在shinydashboard中正确使用re-CAPTCHA验证功能?
正确使用方法
代码失效核心是模块调用写法与shinyCAPTCHA要求不匹配、渲染函数嵌套不符合规范,可运行的实现代码如下:
library(shiny) library(shinydashboard) library(shinyCAPTCHA) ui <- dashboardPage( dashboardHeader(title = "CAPTCHA测试面板"), dashboardSidebar(), dashboardBody( recaptchaUI("test", sitekey = "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"), uiOutput("captcha") ) ) server <- function(input, output, session) { # 采用适配新版shiny的模块调用方式,替换旧版callModule写法 result <- recaptchaServer("test", secret = "6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe") # 将plot渲染逻辑从renderUI中提取,避免重复渲染、响应异常问题 output$plot1 <- renderPlot({ req(result()$success) set.seed(122) histdata <- rnorm(500) hist(histdata[seq_len(input$slider)], main = "直方图", xlab = "数值") }) output$captcha <- renderUI({ req(result()$success) fluidRow( box(plotOutput("plot1", height = 250)), box( title = "控制项", sliderInput("slider", "观测值数量:", 1, 100, 50) ) ) }) } shinyApp(ui, server)
注意事项
- 代码中用到的sitekey和secret为公开测试密钥,仅可用于本地调试,正式上线前需要替换为你自行申请的专属密钥
- 运行时需要保障网络可正常访问reCAPTCHA服务,否则验证组件会加载失败
- 不要在render类函数内部嵌套定义其他output的渲染函数,会导致执行逻辑混乱、响应异常的问题
内容的提问来源于stack exchange,提问作者Rafael Díaz
相关产品推荐
相关产品推荐

