【发布时间】:2021-01-01 20:43:14
【问题描述】:
我想在我的 laravel 项目中使用 reCAPTCHA v2。
目前,我已经通过本教程在我的登录页面中成功实现了它:https://laravelarticle.com/laravel-google-recaptcha-integration
但是到了我的注册页面,验证通过后,弹出错误信息:validation.captcha,不知道为什么。
谁能告诉我可能是什么问题?或者我怎么找不到问题?
这是我的部分代码: 非常感谢!
Register.blade.php
<div class="card-body">
{{ html()->form('POST', route('frontend.auth.register.post'))->open() }}
<div class="row">
<div class="col-12 col-md-6">
<div class="form-group">
{{ html()->label(__('validation.attributes.frontend.last_name'))->for('last_name') }}
{{ html()->text('last_name')
->class('form-control')
->placeholder(__('validation.attributes.frontend.last_name'))
->attribute('maxlength', 191)
->required() }}
</div>
</div>
@if(config('access.captcha.registration'))
<div class="row">
<div class="col">
@captcha
{{ html()->hidden('captcha_status', 'true') }}
</div>
<!--col-->
</div>
<!--row-->
@endif
<!-- google reCAPTCHA -->
<div class="g-recaptcha" id="feedback-recaptcha" data-sitekey="{{env('GOOGLE_RECAPTCHA_KEY')}}"></div>
<div class="row">
<div class="col">
<div class="form-group mb-0 clearfix">
{{ form_submit(__('labels.frontend.auth.register_button')) }}
</div>
<!--form-group-->
</div>
<!--col-->
</div>
<!--row-->
{{ html()->form()->close() }}
规则\Recaptch.php
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Recaptcha implements Rule
{
public function __construct()
{
//
}
public function passes($attribute, $value)
{
$data = array(
'secret' => 'env('reCAPTCHA_SECRET')',
'response' => $value
);
try {
$verify = curl_init();
curl_setopt($verify, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($verify, CURLOPT_POST, true);
curl_setopt($verify, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($verify, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($verify, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($verify);
return json_decode($response)->success;
} catch (\Exception $e) {
return false;
}
}
public function postLoginForm(Request $request){
$this->validate($request, [
'g-recaptcha-response' => ['required', new Recaptcha()]
]);
// Recaptcha passed, do what ever you need
return route(home_route());
}
public function message()
{
return 'ReCaptcha verification failed.';
}
}
【问题讨论】: