【发布时间】:2017-05-31 13:47:26
【问题描述】:
假设您在https://lalaland.shinyapps.io/mail-form/ 上有一个简单的应用程序,用作联系表单。您想在发送电子邮件之前测试发件人是否不是机器人。这可能类似于:
全球:
library(shiny)
library(shinyAce)
library(mailR)
ui.R:
ui<-shinyUI(
fluidPage(
fluidRow(
column(2
,textInput("contact_name", "Name*", placeholder = "Ed Snow")
),
column(2, offset = 0
,textInput("contact_email", "Email*", placeholder = "eddie@lubyanka.com")
)
),
fluidRow(
column(4,
aceEditor(outputId = "contact_message", value = "...", fontSize = 13)
)
),
fluidRow(
column(2,
checkboxInput("contact_not_a_robot", "I'm not a robot*", value = FALSE), # !!! <---
actionButton("contact_click_send", "Send")
))
)
)
server.R:
server <- shinyServer(function(session,input, output) {
observeEvent(input$contact_click_send, {
if( is.null(input$contact_click_send) || input$contact_click_send==0
|| !input$contact_not_a_robot){ # !!! <---
return(NULL)
}
send.mail(from = "kremlin@gmail.com",
to = "trumptower@gmail.com",
subject = "Shower time!",
body = input$contact_message,
smtp = list(host.name = "smtp.gmail.com"
, port = 465
, user.name = "kremlin@gmail.com"
, passwd = "DONALD_BIG_HANDS123"
, ssl = TRUE),
authenticate = TRUE,
html = TRUE, send = TRUE)
# reset form
updateTextInput(session, "contact_name", value = "")
updateTextInput(session, "contact_email", value = "")
updateAceEditor(session, "contact_message", value = "Message sent succesfully!")
updateCheckboxInput(session, "contact_not_a_robot", value = FALSE)
updateActionButton(session, "contact_click_send", icon = icon("check"))
})
})
问题换了一种方式:如何将 (re/)CAPTCHA 编入此 R/Shiny 联系表单?
【问题讨论】:
-
GitHub 上有可用的软件包来执行此操作。 reCAPTCHA v2 - github.com/carlganz/shinyCAPTCHA reCAPTCHA v3 - github.com/sarthi2395/shinygCAPTCHAv3
-
@SiddharthArthi 太好了,我去看看。 CRAN 上有什么东西吗?还有一些分步指南/文档?
-
恐怕我们在 CRAN 中没有为此提供包。您打算使用哪个版本的 reCAPTCHA?我可以据此提供帮助。
-
@SiddharthArthi 将它放在 CRAN 上当然是值得鼓励的。非常欢迎为 v3 提供完整、详细、分步的答案。