Laravel reCaptcha集成

Laravel reCaptcha集成

问题描述:

我想使用Laravel包在我的Laravel项目中执行reCaptcha 而不是。我曾尝试使用经典的reCaptcha V2,但我想实现隐形reCaptcha。Laravel reCaptcha集成

因此,我所做的是:

<form id="subscribeForm" class="form-inline" role="form" method="post" action="/subscribe" style="margin-bottom:70px;"> 
    ... 
    ... 
    <button type="submit" class="btn btn-default">{{trans('content.input_submit')}}</button> 

    <div id="recaptcha" class="g-recaptcha" data-sitekey="---my---key---" data-size="invisible" data-callback="onSubmit"></div> 

    <script> ...callback functions... </script> 
</form> 

我右边浮动的reCAPTCHA条显示正确,但当然,因为我需要一个按钮来执行实际提交我有一个类型的按钮提交,并且没有任何来自reCaptcha div的回调函数被触发。当我返回请求时,我得到空的g-recaptcha-response

为什么不提交独立于回调?

reCaptcha的回调函数不会触发,这取决于您定义回调函数的位置。

它不应该内部$(document).ready()window.onload范围被定义

要提交验证码令牌服务器,你的表单中放置一个隐藏的输入字段

​​3210

替换常规的提交按钮按钮,以便表单不提交,删除验证码<div>,因为它不是必需的。

<button type="button" class="btn btn-default g-recaptcha" data-sitekey="your_site_key" data-callback='onSubmit'>{{trans('content.input_submit')}}</button> 

,你可以使用回调函数填充值,并提交表格

// Google reCaptcha callback 
function onSubmit (res) { 
    document.getElementById("reCaptchaToken").value = res; 
    document.getElementById("subscribeForm").submit(); 
} 

,并使用Input::get('reCaptchaToken')

+0

但没有'数据sitekey'在你的代码。我如何以这种方式获得Google回复?这只是填充隐藏字段的一种通用方式,不能让reCaptcha正常工作? – Norgul

+0

你的''data-sitekey'在你的recaptcha'div'你需要添加这个隐藏的输入字段 – linktoahref

+0

哦..现在我知道这只是输入。问题在于'data-callback'没有做任何事情。我不知道是否有一些特殊的方法来注册一个函数,因为脚本内部没有被调用。在我的IDE中它甚至是灰色的,就好像它没有被使用 – Norgul

这里是如何做到这一点正常访问验证码令牌控制器扩展了Validator,但是该解决方案使用google/recaptcha软件包(比使用CURL更优雅)。

composer require google/recaptcha "~1.1" 

创建config/app.phprecaptcha_secret_keyrecaptcha_site_key新的配置值或其他自定义配置文件。

AppServiceProviderboot()方法:

Validator::extend('recaptcha', function ($attribute, $value, $parameters, $validator) { 
    $recaptcha = new ReCaptcha(config('app.recaptcha_secret_key')); 
    $resp = $recaptcha->verify($value, request()->ip()); 

    return $resp->isSuccess(); 
}); 

resources/lang/validation.php添加:

'recaptcha' => 'The :attribute answer is invalid.', 

另外,为了使错误消息更好此添加到同一个文件内的attributes阵列

'g-recaptcha-response' => 'reCAPTCHA', 

In要显示reCAPTCHA的视图文件,例如contact.blade.php

<div class="g-recaptcha" data-sitekey="{{ config('app.recaptcha_site_key') }}"></div> 
<script src="https://www.google.com/recaptcha/api.js"></script> 

添加data-size="invisible"等等到div如果你想让它不可见。

最后,添加新的验证规则到你的控制器:

'g-recaptcha-response' => 'recaptcha'