我使用React.js和Java Spring。
我将google recaptcha连接到本地主机上的站点。它工作正常,但一段时间后,它停止了。在Google Recaptcha的网站上,出现此错误。
您的网站不检查reCAPTCHA解决方案,这是必需的 正确操作reCAPTCHA。
在React端,我以这种方式连接了验证码
“ npm install react-recaptcha-google --save”
并添加了此代码
<ReCaptcha
ref={(el) => {this.captchaDemo = el;}}
size="normal"
data-theme="dark"
render="explicit"
sitekey="my_site_key"
/>
在Java Spring端,我使用以下代码
private static final String CAPTCHA_URL = "https://www.google.com/recaptcha/api/siteverify?secret=%s&response=%s";
@Value("${recaptcha.secret}")
private String secret;
@PostMapping("/register")
public ResponseEntity<?> createNewCustomer(@Valid @RequestBody Customer customer, BindingResult result, HttpServletRequest request){
validator.validate(customer,result);
ResponseEntity<?> errorMap = exceptionMapHandler.exceptionResponse(result);
if (errorMap != null) return errorMap;
String url = String.format(CAPTCHA_URL,secret, request.getParameter("g-recaptcha-response"));
CaptchaResponseDto captchaResponseDto = restTemplate.postForObject(url, Collections.emptyList(), CaptchaResponseDto.class);
if (!captchaResponseDto.isSuccess()){
throw new CaptchaException("Captcha not confirmed");
}
Customer saveCustomer = customerService.saveOrUpdate(customer,null);
return new ResponseEntity<>(saveCustomer, HttpStatus.CREATED);
}
CaptchaResponseDto类
@JsonIgnoreProperties(ignoreUnknown = true)
@Getter
@Setter
public class CaptchaResponseDto {
private boolean success;
@JsonAlias("error-codes")
private Set<String> errorCodes;
}
我决定看看 request.getParameter(“ g-recaptcha-response”)需要什么。 并发现此值为空。
因此,我的网址是我想向google发送的内容
"https://www.google.com/recaptcha/api/siteverify?secret=secret-
key&response=null"
结果,我收到以下错误[ invalid-input-response ]
我检查了站点密钥和秘密密钥,它们是正确的。
我再说一遍,这段代码运行完美。
如何解决此问题? 感谢您的帮助!