Jul 24, 2023
0
Level 1
recaptcha v3 not working on submit in laravel livewire
below are code for recaptcha to work with livewire
index.blade.php
<section class="single-items center-block parallax contact-us-sec" id="contact" style="background: url(assets/front/images/contact-us.png); box-shadow: rgba(0, 0, 0, 0.5) 0px 0px 0px 2000px inset;">
<div class="container">
<div class="align-items-baseline mb-5 row">
<div class="col-12 col-lg-5 contact-box text-center text-md-left contact-box-shadow mr-5">
@livewire('contact-form')
</div>
</div>
</div>
</section>
contact-form.blade.php
<div>
<div class="c-box wow fadeInRight">
<h4 class="small-heading">Let's Get In <strong>Touch</strong></h4>
@if (Session::has('success'))
<div class="alert alert-success">{{ Session::get('success') }}</div>
@endif
@if (Session::has('failure'))
<div class="alert alert-danger">{{ Session::get('failure') }}</div>
@endif
<form class="contact-form" wire:submit.prevent="submitForm" method="POST">
@csrf
<div class="row my-form">
<div class="col-12">
<input type="text" class="form-control" wire:model.defer="userName" placeholder="Name" value="{{ old('userName') }}">
@error('userName')
<p class="text-danger">{{ $message }}</p>
@enderror
</div>
<div class="col-12 col-md-6">
<input type="email" class="form-control" wire:model.defer="userEmail" placeholder="Email" value="{{ old('userEmail') }}">
@error('userEmail')
<p class="text-danger">{{ $message }}</p>
@enderror
</div>
<div class="col-12 col-md-6">
<input type="text" class="form-control" wire:model.defer="userMobile" placeholder="Mobile No" value="{{ old('userMobile') }}">
@error('userMobile')
<p class="text-danger">{{ $message }}</p>
@enderror
</div>
<div class="col-12">
<textarea class="form-control" wire:model.defer="userMessage" placeholder="Message" rows="6">{{ old('userMessage') }}</textarea>
@error('userMessage')
<p class="text-danger">{{ $message }}</p>
@enderror
</div>
<div class="col-12">
<button type="submit" class="btn rounded-pill user-contact"><i class="fa fa-spinner fa-spin mr-2 d-none" aria-hidden="true"></i>Submit</button>
</div>
</div>
</form>
</div>
</div>
and i have also included below script in head tag
<script src="https://www.google.com/recaptcha/api.js"></script>
contactForm.php
public $userName;
public $userEmail;
public $userMobile;
public $userMessage;
// public $g_recaptcha_response;
public function submitForm(){
$this->validate([
'userName' => 'required',
'userEmail' => 'required|email',
'userMobile' => 'required',
'userMessage' => 'required',
// 'g_recaptcha_response' => 'required'
], [
'userName.required' => 'Full Name is required',
'userEmail.required' => "Email Address is required",
'userEmail.required' => "Email Address should be proper email with '@' ",
'userMobile.required' => 'Mobile No is required',
'userMessage.required' => 'Message field is required',
// 'g_recaptcha_response.required' => 'The google verification is required'
]);
// $recaptcha = $_POST['g_recaptcha_response'];
// $curl = curl_init();
// curl_setopt_array($curl, array(
// CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
// CURLOPT_RETURNTRANSFER => true,
// CURLOPT_ENCODING => '',
// CURLOPT_MAXREDIRS => 10,
// CURLOPT_TIMEOUT => 0,
// CURLOPT_FOLLOWLOCATION => true,
// CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
// CURLOPT_CUSTOMREQUEST => 'POST',
// CURLOPT_POSTFIELDS => array(
// 'secret' => config('services.recaptcha.secret_key'),
// 'response' => $recaptcha
// )
// ));
// $responsejson = curl_exec($curl);
// curl_close($curl);
// $response = json_decode($responsejson);
// if ($response->success && $response->success == 1) {
$contact = new Contact();
$contact->name = $this->userName;
$contact->email = $this->userEmail;
$contact->phone = $this->userMobile;
$contact->message = $this->userMessage;
$contact->save();
$this->reset();
if ($contact) {
$details = [
'title' => 'You received a new message from Febber16 Productions site contact form :',
'full_name' => $this->userName,
'email' => $this->userEmail,
'mob_no' => $this->userMobile,
'msg' => $this->userMessage
];
try {
Mail::to(config('mail.from.address'))->send(new ContactMailResponse($details));
return redirect()->back()->with('success', 'Thanks for contacting us. We will get back to you Shortly');
} catch (\Throwable $th) {
Log::error('Error sending email: ' . $th->getMessage());
return redirect()->back()->with('failure', 'Something went wrong while submitting query. Please try again in few minutes!');
}
} else {
return redirect()->back()->with('failure', 'Something went wrong, Please try again');
}
// } else {
// return redirect()->back()->with('failure', 'Google recaptcha verification failed. Please try again in few minutes!');
// }
can anyone explain what is going wrong as it gives me error as
POST method is not supported for route '/' , supported methods are GET, HEAD.
Please or to participate in this conversation.