বিভাগ: লারাভেল টিপস এন্ড ট্রিক্স
আমরা ওয়েব অ্যাপ্লিকেশন তৈরী করার সময় যাতে Bots অটোমেটিক ফেইক রিকুয়েস্ট দিয়ে আমাদের অ্যাপ্লিকেশন এর ক্ষতি করতে না পারে তার জন্য হয়ত আমরা আমাদের লগিন, রেজিস্টেশন পেইজে নাম্বার ক্যাপচা ব্যবহার করে থাকি কিন্তু এই ক্ষেত্রে সবচেয়ে নিরাপদ হচ্ছে Google reCAPTCHA ব্যবহার করা। আজ আমি কিভাবে লারাভেল অ্যাপ্লিকেশনে Google reCAPTCHA ব্যবহার করতে হয় তা ধাপে ধাপে দেখাবো।
১মে আপনার প্রজেক্টের .env ফাইলটি খুলে তাতে নিচের কোডটুকু যুক্ত করুন
GOOGLE_RECAPTCHA_KEY=key_here
GOOGLE_RECAPTCHA_SECRET=key_secret_here
এখন Google reCAPTCHA console গিয়ে আপনার সাইট নিবন্ধন করে নিন। নিবন্ধন শেষে আপনি একটি কী (key) ও সিক্রেট কী (secret key) পাবেন যা .env ফাইলে আপডেট করে নিন।
অতপর app/Validations ডিরেক্টরিতে ReCaptcha.php নামে একটি ফাইল তৈরী করে তাতে নিচের কোডটুকু পেস্ট করে সেভ করুন।
<?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('GOOGLE_RECAPTCHA_SECRET'),
'response' => $value
]
]
);
$body = json_decode((string)$response->getBody());
return $body->success;
}
}
উপরের এই ক্লাসটি আমাদের অ্যাপ্লিকেশনের জন্য একটি কাস্টম ভেলিডেশন হিসেবে কাজ করবে। এখন এই কাসটম ভেলিডেশনটিকে আমাদের লারাভেল অ্যাপিকেশনকে চেনাতে হবে। তাই app/Providers/AppServiceProvider.php ফাইলটি খুলে তার boot method এ যুক্ত করুন।
Validator::extend('recaptcha', 'App\\Validators\\ReCaptcha@validate');
অবশ্যই Illuminate\Support\Facades\Validator ইমপোর্ট করে নিবেন।
এখন আপনি যে ফর্ম এ Google reCAPTCHA ব্যবহার করতে চান তাতে নিন্মের কোডটুকু যুক্ত করুন। এটি হতে পারে লগিন ফর্ম/ রেজি: ফর্ম / কনটাক্ট ফর্ম
<script src='https://www.google.com/recaptcha/api.js'></script>
@if(env('GOOGLE_RECAPTCHA_KEY'))
<div class="g-recaptcha"
data-sitekey="{{env('GOOGLE_RECAPTCHA_KEY')}}">
</div>
@endif
এখন কন্ট্রোলারে এইভাবে ভেলিডেশন করুন
$rules = [
'g-recaptcha-response' => 'required|recaptcha'
];
$validation = Validator::make($r->all(), $rules);
if ($validation->fails()) {
return redirect()->back()->withErrors($validation->errors());
}
else{
return redirect()->back()->with('success','validation successful');
}
আপনি যদি জাভাস্ক্রিপ্ট ক্লায়েন্ট সাইডে ক্যাপচা সঠিকভাবে ভেলিডেশন হয়েছে কিনা তা জানতে চান তাহলে ভিউর মার্কআপ এ আরো একটি attribute যুক্ত করতে হবে
data-callback="captchaResponse"
ভ্যালিডেশন এর ফিডব্যাক পেতে জাভাস্ক্রিপ্ট-এ captchaResponse নামে একটি ফাংশন তৈরী করুন।
function captchaResponse(res) {
if (res.length) {
//captcha success do you stuff
}
else {
//captcha fail
}
}
একবার ReCaptcha ক্লাস ফাইলটি তৈরী করে রাখলে আপনি সেটা আপনার যেকোন প্রজেক্টে রিইউজ করতে পারবেন। আশা করছি এই পোষ্টটি আপনাদের উপকারে আসবে। ইমপ্লিমেন্ট করতে গিয়ে কোন প্রকার সমস্যায় পড়লে অবশ্যই আমাদের ফেইসবুক পেইজের এই পোষ্টটিতে কমেন্ট করে জানাতে পারবেন।
পোষ্টটির ভিডিও টিউটোরিয়াল: https://youtu.be/w9tJz2H5XeI