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模板,若有,删除错误的条件渲染代码(比如仅在验证通过时显示验证码的逻辑)
- 查找主题自定义JS中是否存在类似
- 若使用了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
相关产品推荐
相关产品推荐

