[Học Laravel] Hướng dẫn tích hợp Google reCAPTCHA trong Laravel

[Học Laravel] Hướng dẫn tích hợp Google reCAPTCHA trong Laravel

Google reCaptcha là một dịch vụ của Google tích hợp được vào bất kỳ chỗ nào muốn xác định xem hành động nào đó là do con người hay máy tính tạo ra. Khi bạn lướt web, chắc chắn bạn đã từng gặp những ô captcha với chữ loằng ngoằng. Các cải tiến mới đây, các thuật toán mới giúp cho Google xác định được hành vi do con người hay máy tính một cách chính xác mà không cần đến những ký tự loằng ngoằng như trước. Trong bài viết này WebFree.Net sẽ hướng dẫn các bạn tích hợp Google reCAPTCHA vào website của bạn bằng Laravel.

1. Đăng ký Google reCAPTCHA

Trước tiên, bạn cần có một tài khoản Google để tạo Google reCAPTCHA cho website, vào trang đăng ký click vào Get reCAPTCHA. Điền thông tin vào form đăng ký. 

Form đăng ký google reCAPTCHA

Như vậy bạn đã tạo ra một reCAPTCHA để sử dụng cho website. Chúng ta sẽ thấy Site key và Secret key được sử dụng để tích hợp reCAPTCHA.

key captcha

2. Thiết lập cấu hình, tạo class xử lý reCAPTCHA

Hai khóa được tạo ra trong bước đăng ký reCAPTCHA sẽ được đưa vào ứng dụng Laravel thông qua .env hoặc config/app.php

GOOGLE_RECAPTCHA_KEY=6Leil3AUAAAAABdYLqrP_Io7NluMnMcqQrz6vGR1
GOOGLE_RECAPTCHA_SECRET=6Leil3AUAAAAAJafuG7aCdwlppsNeSxqWSDJhHdC

Các key ở trên chỉ là demo, bạn nên tạo key riêng cho reCAPTCHA của bạn.Form đăng ký có email chúng ta có thể dùng xác thực qua email đảm bảo hơn, tuy nhiên có nhiều website muốn người dùng đăng ký nhanh không cần qua bước xác thực email lằng nhằng mà chỉ cần xác định đúng là người không phải máy thôi. Chúng ta tạo view cho trang đăng ký (resource/views/auth/register.blade.php):

Chỉnh sửa (resource/views/layouts/app.blade.php)




    {{ config('app.name', 'Laravel') }}

OK. giờ vào localhost:8000/register, ta được:

kết quả sau khi tích hợp thành công reCAPTCHA

Nó đã hiện lên rất ok, tiếp theo chúng ta sẽ xử lý phần post dữ liệu form đăng nhập. Chúng ta sẽ tạo thêm một phương thức Laravel Validate để kiểm tra kết quả Google reCAPTCHA trả về, nếu là máy chúng ta sẽ thông báo lên “Form đăng ký không dành cho robot”. Tạo thư mục Validators trong thư mục app và tạo một file ReCaptcha.php với nội dung:

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;
    }
}

Trong class ReCaptcha chúng ta có sử dụng class Client trong gói guzzlehttp/guzzle, thực hiện cài đặt gói này vào project, chạy composer:

composer require guzzlehttp/guzzle

Tiếp theo chúng ta đăng ký validator vừa tạo vào hệ thống để sử dụng, thêm vào phương thức boot() của appProvidersAppServiceProvider.php:

public function boot()
{      
   Validator::extend('recaptcha', '[email protected]');
}

Sau đó thêm message lỗi khi kiểm tra reCAPTCHA vào file resources/lang/en/validation.php

'recaptcha'=>'Form đăng ký không dành cho robot'

Trong phương thức validator() của RegisterController (appHttpControllersAuthRegisterController.php) thêm kiểm tra kết quả Google reCAPTCHA:

/**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return IlluminateContractsValidationValidator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
            'g-recaptcha-response'=>'required|recaptcha',
        ]);
    }

3. Kết luận

Vậy là WebFree.Net đã hướng dẫn  tích hợp xong Google reCAPTCHA vào form đăng ký trong Laravel. Hy vọng với hướng dẫn này sẽ giúp các bạn vận dụng vào dự án của mình. Chúc bạn thành công!.

4. Xem thêm

admin

Leave a Reply

Your email address will not be published. Required fields are marked *