Laravel с проверкой Google Recaptcha v3 - PullRequest
1 голос
/ 12 марта 2020

Привет, мне нужна помощь в laravel, включая Google Reaptcha, я не могу набрать очень много очков, я могу только получить токен из рекапчи, и когда я пытаюсь сделать проверку, она всегда ложна, я не знаю, почему

Зарегистрируйте контроллер

  protected function validator(array $data)
  {
    $messages = [
        'email.unique' => __('frontend.email_in_use'),
    ];

    $validate = Validator::make($data, [
        'name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6|confirmed',
        'grepcaptcha' => ['require', new ReCAPTCHAv3],
    ], $messages);
  }

  /**
  * Create a new user instance after a valid registration.
  *
  * @param  array  $data
  * @return User
  */
protected function create(array $data){

    if (array_key_exists("register",$data)){
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }else{
        if($data['role']==1){

             $user = User::create([
                'name' => $data['name'],
                'email' => $data['email'],
                'surname' => $data['surname'],
                'password' => bcrypt($data['password']),
                 'vat' => $data['nif'],
                 'phone_number' => $data['phone'],
                 'headquarters_country' => $data['country'],
            ]);
        }else{
            $user = User::create([
                'name' => $data['name'],
                'email' => $data['email'],
                'surname' => $data['surname'],
                'vat' => $data['nif'],
                'headquarters_address' => $data['address'],
                'headquarters_zip' => $data['zip_code'],
                'headquarters_city' => $data['city'],
                'headquarters_country' => $data['country'],
                'phone_number' => $data['phone'],
                'password' => bcrypt($data['password']),
                'roles' => 'transporter',
            ]);
        }
    }
    Email::sendNotificationNewUser($user->id);
    return $user;
}

Правило рекапитчи

<?php
namespace App\Rules;
use GuzzleHttp\Client;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Request;
class ReCAPTCHAv3 implements Rule
{
/**
 * Determine if the validation rule passes.
 *
 * @param  string  $attribute
 * @param  mixed  $value
 * @return bool
 */
public function passes($attribute, $value)
{
    $client = new Client();

    try {
        $response = $client->post('https://www.google.com/recaptcha/api/siteverify', [
            'form_params' => [
                'secret' => config('recaptcha.v3.private_key'),
                'response' => $value,
                'remoteip' => Request::ip(),
            ],
        ]);
    } catch (\GuzzleHttp\Exception\BadResponseException $e) {
        return false;
    }
    return $this->getScore($response) >= config('recaptcha.v3.minimum_score');
}
private function getScore($response)
{
    return \GuzzleHttp\json_decode($response->getBody(), true)['score'];
}
/**
 * Get the validation error message.
 *
 * @return string
 */
public function message()
{
    return 'Failed on reCAPTCHA verification.';
}
}

после того, как я отправляю форму, получаю данные формы и токен рекапчи ("grecaptcha" => "03AERD8XpsUZNKn-hWeTnkU3- ... ")

Кто-нибудь может мне помочь?

...