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

Drupal中Google reCAPTCHA v2未勾选提交时验证码框隐藏的问题求助

修复Drupal中Google reCAPTCHA v2未勾选提交时验证码框隐藏的问题

1. 检查官方reCAPTCHA模块配置

  • 确认使用的是Drupal官方reCAPTCHA模块,进入后台路径/admin/config/people/captcha/recaptcha:
    • 将「验证失败时的行为」设置为保留验证码并显示错误提示,避免触发隐藏逻辑
    • 勾选「验证失败后重新加载reCAPTCHA」选项,确保验证失败后验证码能正常重置显示
  • 进入对应表单的字段管理页面(比如节点表单路径为/admin/structure/types/manage/[内容类型]/form-display),开启reCAPTCHA字段的「验证失败时可见」选项

2. 排查主题或自定义JS冲突

这类问题大多是前端代码干扰了reCAPTCHA的DOM渲染:

  • 临时切换到Bartik/Seven默认主题测试,若问题消失,说明是当前主题的问题:
    • 查找主题自定义JS中是否存在类似$('.g-recaptcha').hide()的代码,移除或修改逻辑,仅在验证通过后隐藏验证码容器
    • 检查主题是否覆盖了recaptcha.html.twig模板,若有,删除错误的条件渲染代码(比如仅在验证通过时显示验证码的逻辑)
  • 若使用了AJAX表单模块,确保表单重新渲染后调用grecaptcha.render()方法重新初始化验证码,避免DOM丢失导致隐藏

3. 调整自定义表单的验证逻辑(针对自定义开发的表单)

如果是自行开发的表单,修正验证函数:

function my_custom_form_validate($form, &$form_state) {
  $recaptcha_response = \Drupal::request()->request->get('g-recaptcha-response');
  if (empty($recaptcha_response)) {
    // 仅设置错误提示,不要添加隐藏验证码的代码
    form_set_error('recaptcha', t('请勾选"我不是机器人"以继续'));
  }
}
  • 若表单包含AJAX回调,确保验证失败时返回的表单片段完整包含reCAPTCHA字段,不要省略

4. 清除缓存并更新模块

  • 执行缓存清除:后台路径/admin/config/development/performance点击「清除所有缓存」,或使用Drush命令drush cr
  • 将reCAPTCHA模块更新到最新稳定版本,旧版本可能存在验证失败后自动隐藏的已知bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:35:58