validación recaptchaV3 en Laravel

Estoy traying para añadir recaptchaV3 en una web, pero siempre me devolvió el error en json_decode() masticé mis valores variables .env con echo y está bien, pero la respuesta de validación es incorrecta. En la consola de google desarrollada, tengo mi ky configurado. Estoy buscando este código:

$url = "https://www.google.com/recaptcha/api/siteverify";
        $data = [
            'secret'   => env("RECAPTCHAV3_SECRET"),
            'response' => request('recaptcha')
        ];

        $options = [
            'http'  => [
                'header'    => "Content-type: application/x-www-form-urlencoded\r\n",
                'method'    => 'POST',
                'content'   => http_build_query($data)
            ]
        ];
        $context = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        $resultJson = json_decode($result);

        if($resultJson->success != true){
            echo "Captcha Error"; 
            exit();

        }else{

            $data = $request->all();

            // SEND EMAIL
            \Mail::send('web.emailContact', $data, function($message) use ($request)
            {
                $message->from($request->email, $request->name);
                $message->subject("Prueba formulario contacto");
                $message->to("[email protected]");
            });
        }

Tengo que decir que la imagen de captcha V3 se muestra en la esquina derecha de la web... para esto creo que integré captcha bien, pero cuando envío mi forma, devuelto Catcha Error

Tengo este código:

$validate = \Validator::make(Input::all(), [
            'g-recaptcha-response' => 'required|recaptchav3:register,0.5',
            'name'  => 'required|min:3',
            'email' => 'required|email',
            'phone' => 'required|min:9'
        ]);

        //check if validation it´s correct
        if($validate->fails()){
            \Redirect::back()->withErrors($validate->messages())->withInput();
        }else{
            return \Redirect::route('contact')->withMessage("Mensaje enviado correctamente");
        }


        $score = \RecaptchaV3::verify($request->get('g-recaptcha-response'));
        if($score > 0.7) {
            // go
        } elseif($score > 0.3) {
            // require additional email verification
        } else {
            return abort(400, 'You are most likely a bot');
        }

pero este código siempre volvió a bloquear.

Espero que alguien pueda ayudarme, por favor.

Las recompensas

Pregunta hecha hace 3 años, 4 meses, 29 días - Por syntaxsorcerer


3 Respuestas:

  • Yo resuelvo mi problema:

    mi nombre captcha estaba equivocado

    $url = "https://www.google.com/recaptcha/api/siteverify";
            $data = [
                'secret'   => env("RECAPTCHAV3_SECRET"),
                'response' => request('reCaptcha')
            ];
    
            $options = [
                'http'  => [
                    'header'    => "Content-type: application/x-www-form-urlencoded\r\n",
                    'method'    => 'POST',
                    'content'   => http_build_query($data)
                ]
            ];
            
            $context = stream_context_create($options);
            $result = file_get_contents($url, false, $context);
            $resultJson = json_decode($result);
    
            if($resultJson->success != true){
                echo "Captcha Error"; 
                exit();
    

    Respondida el Dec 17, 2020 a las 07:54 - por compilercaptain

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando podría estar relacionado con la forma en que estás realizando la validación de reCAPTCHA v3 en Laravel.

    En el primer bloque de código que proporcionaste, estás intentando validar reCAPTCHA v3 enviando directamente una solicitud POST a la URL de verificación de Google. Sin embargo, esta forma de validación no es compatible con reCAPTCHA v3, ya que reCAPTCHA v3 funciona de forma diferente a reCAPTCHA v2.

    En lugar de enviar la solicitud directamente a la URL de verificación de Google, Laravel proporciona una forma más sencilla de validar reCAPTCHA v3 a través de un paquete o una solución personalizada que integre reCAPTCHA v3.

    En el segundo bloque de código que proporcionaste, estás utilizando el paquete "anhskohbo/no-captcha" para validar reCAPTCHA v3. Sin embargo, parece que estás teniendo problemas con la validación.

    Para corregir este problema, asegúrate de seguir las instrucciones de configuración del paquete "anhskohbo/no-captcha" correctamente. Verifica que has configurado adecuadamente el archivo de configuración y que estás pasando correctamente el token de reCAPTCHA v3 al método verify. También asegúrate de que estás utilizando la clave secreta correcta en tu archivo de configuración.

    Si sigues experimentando problemas, te recomendaría revisar la documentación oficial del paquete "anhskohbo/no-captcha" para asegurarte de estar utilizando correctamente las funcionalidades proporcionadas por el paquete.

    Es importante recordar que reCAPTCHA v3 no requiere interacción por parte del usuario, por lo que la validación se realiza de forma más transparente y silenciosa. Asegúrate de que estás siguiendo las recomendaciones de Google en cuanto a la implementación de reCAPTCHA v3 en tu sitio web.

    Espero que esta información te sea de ayuda para corregir el problema que estás experimentando con la validación de reCAPTCHA v3 en Laravel. ¡Buena suerte!

    Respondida el Dec 18, 2020 a las 07:53 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Resolución de problemas de validación de recaptchaV3 en Laravel

    1. Verificar la configuración de reCAPTCHA

    Asegúrate de que hayas configurado correctamente las claves del sitio y secretas de reCAPTCHA en tu archivo .env. Verifica que el sitio que estás utilizando esté registrado en la consola de desarrolladores de Google.

    2. Dependencias de Composer

    Asegúrate de que has instalado las dependencias de Composer necesarias para la verificación de reCAPTCHAv3:

    
    composer require recaptcha/recaptcha
    

    3. Código de validación

    Tu código de validación parece correcto, pero hay un problema con la forma en que estás manejando la respuesta JSON. Debes utilizar la función json_decode($result, true) para convertir la respuesta JSON en una matriz PHP asociativa.

    El código actualizado:

    php
    $resultJson = json_decode($result, true);
    

    4. Comprobación de éxito

    La comprobación de éxito debe ser $resultJson['success'], no $resultJson->success.

    El código actualizado:

    php
    if($resultJson['success'] != true){
        echo "Captcha Error"; 
        exit();
    }
    

    5. Código de validación de formulario

    En tu código de validación de formulario, estás utilizando la validación recaptchav3, pero no has importado la clase RecaptchaV3.

    El código actualizado:

    php
    use Recaptcha\RecaptchaV3;
    
    // Código de validación de formulario
    $validate = \Validator::make(Input::all(), [
        'g-recaptcha-response' => 'required|recaptchav3:register,0.5',
        'name'  => 'required|min:3',
        'email' => 'required|email',
        'phone' => 'required|min:9'
    ]);
    

    6. Comprobación de puntuación reCAPTCHAv3

    Elimina el código que intenta comprobar la puntuación de reCAPTCHAv3. Este paso no es necesario para la verificación básica de reCAPTCHAv3.

    7. Depurar

    Utiliza dd($resultJson) para depurar la respuesta JSON y verificar que contiene los valores esperados. Utiliza dd($validate) para depurar los errores de validación del formulario.

    Nota:* Si aún tienes problemas después de realizar estos cambios, intenta desactivar temporalmente cualquier otro complemento o extensión de seguridad que pueda estar interfiriendo con la verificación de reCAPTCHAv3.

    Respondida el Dec 18, 2020 a las 07:58 - por Gemini

    Votos positivos: 0 | Votos negativos: 0