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')
这里是如何做到这一点正常访问验证码令牌控制器扩展了Validator
,但是该解决方案使用google/recaptcha软件包(比使用CURL更优雅)。
composer require google/recaptcha "~1.1"
创建config/app.php
为recaptcha_secret_key
和recaptcha_site_key
新的配置值或其他自定义配置文件。
在AppServiceProvider
boot()
方法:
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'
但没有'数据sitekey'在你的代码。我如何以这种方式获得Google回复?这只是填充隐藏字段的一种通用方式,不能让reCaptcha正常工作? – Norgul
你的''data-sitekey'在你的recaptcha'div'你需要添加这个隐藏的输入字段 – linktoahref
哦..现在我知道这只是输入。问题在于'data-callback'没有做任何事情。我不知道是否有一些特殊的方法来注册一个函数,因为脚本内部没有被调用。在我的IDE中它甚至是灰色的,就好像它没有被使用 – Norgul