You need to enable JavaScript to run this app. Laravel集成reCAPTCHA v3时g-recaptcha-response返回空值问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Laravel集成reCAPTCHA v3时g-recaptcha-response返回空值问题求助

reCAPTCHA令牌未写入隐藏域问题解决方案

核心问题定位

当前代码核心问题是定义的onClick函数没有关联到表单提交触发逻辑,提交表单时不会执行令牌获取和赋值逻辑,所以隐藏域始终为空。同时reCAPTCHA的令牌获取是异步操作,未做异步等待直接提交也会导致值还没写入就完成提交。

具体修复步骤

  • 第一步:给表单提交按钮绑定点击事件,确保提交动作先触发令牌获取逻辑
<!-- 在原有提交按钮上增加onclick属性绑定 -->
<button type="submit" onclick="onClick(event)">提交表单</button>
  • 第二步:调整JS逻辑,令牌赋值完成后再手动提交表单
function onClick(e) {
    e.preventDefault();
    // 获取当前触发提交的所属表单
    const submitForm = e.target.closest('form');
    grecaptcha.ready(function() {
        grecaptcha.execute('{!! $settings->recaptcha_site_key !!}', {action: 'submit'}).then(function(token) {
            console.log('test1');
            if (token) {
                console.log('test2');
                document.getElementById('recaptcha').value = token;
                // 令牌写入完成后再提交表单
                submitForm.submit();
            }
        });
    });
}

验证方法

修改完成后打开浏览器开发者工具,点击提交按钮查看控制台是否输出test1、test2日志,同时在元素面板查看id为recaptcha的隐藏域是否被填入了字符串值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 04:30:02