【问题标题】:implement reCAPTCHA in laravel project在 laravel 项目中实现 reCAPTCHA
【发布时间】: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.';
    }
}

【问题讨论】:

标签: php laravel recaptcha


【解决方案1】:

原来我犯了一个愚蠢的错误,似乎我把下面的代码放在了错误的文件中。

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());
}

上面的代码应该放在控制器中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2019-06-27
    • 2019-12-07
    • 2021-06-02
    • 2019-05-04
    相关资源
    最近更新 更多