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

Rails应用集成Devise与recaptcha gem后未向Google reCAPTCHA v3发送请求

问题根因

从请求日志可以看到,reCAPTCHA v3生成的校验token存放在g-recaptcha-response-data[login]/g-recaptcha-response-data[signup]参数中,而你使用的verify_recaptcha方法默认读取的是g-recaptcha-response参数,该参数值为空,导致校验逻辑直接判定失败,没有触发向Google reCAPTCHA服务的校验请求,因此你在控制台看不到新的请求记录。

解决方法

你可以任选以下两种方案之一修复:

方案一:修改视图配置(无需改控制器)

在视图的recaptcha_v3调用中添加flush: true参数,让生成的token直接写入g-recaptcha-response默认参数:

  • 登录视图修改为:<%= recaptcha_v3(action: 'login', flush: true) %>
  • 注册视图修改为:<%= recaptcha_v3(action: 'signup', flush: true) %>

方案二:修改控制器校验逻辑(无需改视图)

在控制器的verify_recaptcha调用中手动指定读取token的参数路径:

  1. 登录控制器SessionsController中check_captcha方法的校验语句修改为:
return if verify_recaptcha(action: 'login', response: params.dig('g-recaptcha-response-data', 'login'))
  1. 注册控制器RegistrationsController中check_captcha方法的校验语句修改为:
return if verify_recaptcha(action: 'signup', response: params.dig('g-recaptcha-response-data', 'signup'))

额外检查项

确认你config/initializers/recaptcha.rb的初始化配置正确,使用的是reCAPTCHA v3对应的站点密钥和服务密钥,同时配置了合理的校验阈值:

Recaptcha.configure do |config|
  config.site_key = '你的v3站点密钥'
  config.secret_key = '你的v3服务密钥'
  config.minimum_score = 0.5 # 可根据业务需求调整阈值,范围0~1
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:02