احتمالا تا حالا اسم ریکپچا به گوشتون خورده و باهاش آشنایی دارید. ریکپچا یک ابزار گوگل هستش که برای جلوگیری از اسپم و تشخیص ربات ها استفاده میشه و به راحتی میتونید ازش توی پروژه هاتون استفاده کنید تا امنیت فرم هاتون بالاتر بره.
توی مرحله اول باید روی پروژه لاراولی شما افزونه Guzzle نصب باشه. برای نصب این افزونه دستور زیر رو وارد کنید.
composer require guzzlehttp/guzzle
برای اطلاعات بیشتر در مورد Guzzle میتونید به این لینک مراجعه کنید
توی مرحله بعد وارد کنسول کپچای گوگل بشید و سایت خودتون همراه با دامنه اون (چه دامنه مجازی چه واقعی) رو ثبت کنید. برای ورود به کنسول کپچا کلیک کنید. بعد از ثبت سایت خود دو کلید به شما میده یکی به نام site_key و دیگری به نام secret_key که از این دو کلید باید توی پروژتون استفاده کنید پس برای استفاده ازشون دو متغیر به فایل env لاراول اضافه می کنیم.
RECAPTCHA_SITE_KEY=your_site_key RECAPTCHA_SECRET_KEY=your_secret_key
بعد از ثبت دامنه وارد پروژه خودتون بشید و اسکریپت زیر رو در هدر سایت لود کنید.
<script src="https://www.google.com/recaptcha/api.js?explicit&hl=fa" async defer>
خب الان میتونید با تگ زیر به فرمتون ریکپچا رو اضافه کنید.
<div class="g-recaptcha" data-sitekey="{{env('RECAPTCHA_SITE_KEY')}}"></div>
توی خصوصیت data-sitekey کلیدی که از کنسول گرفتید و در env ذخیره کردید رو چاپ کنید
الان اگر صفحه رو ریلود کنید میبینید که ریکپچا گوگل به فرم شما اضافه شده.
خب الان میریم سراغ ولیدیشن ریکپچا توی لاراول برای این کار اول از همه یک فایل به نام ReCaptcha.php توی مسیر زیر ایجاد کنید
app/Validators
محتویات زیر رو توی این فایل کپی کنید.
<?php namespace App\Validators; use GuzzleHttp\Client; class ReCaptcha { public function validate($attribute, $value, $parameters, $validator) { $client = new Client; $response = $client->post('https://www.google.com/recaptcha/api/siteverify', [ 'form_params' => [ 'secret' => env('RECAPTCHA_SECRET_KEY'), 'response' => $value ] ] ); $body = json_decode((string)$response->getBody()); return $body->success; } }
توی فیلد secret کلیدی که از کنسول گرفتید و در env ذخیره کردید رو چاپ کنید
قدم بعدی باید به هسته لاراول ولیدیشنمون رو اضافه کنیم برای این کار وارد فایل AppServiceProvider.php بشید و توی متد boot خط زیر رو بنویسید.
Validator::extend('recaptcha', 'App\\Validators\\ReCaptcha@validate');
ابتدای فایل namespace زیر رو هم use کنید.
use Illuminate\Support\Facades\Validator;
خب همه چی آمادست الان فقط باید از ولیدیشنی که ساختید به شکل زیر توی کنترلر استفاده کنید.
$this->validate(\request(), [ 'g-recaptcha-response' => 'required|recaptcha' ]);