16/09/2018, 18:18

Tìm hiểu Email Verification trong Laravel 5.7

Hiện nay nhiều Web app yêu cầu người dùng xác thực email trước khi sử dụng ứng dụng. Thay vì các bạn phải tự xây dựng chức năng này thì từ version 5.7 trở đi, Laravel đã thêm vào một tính năng mới là Email Verification. Như tên gọi khi sử dụng nó website của bạn sẽ buộc người dùng phải verify email ...

Hiện nay nhiều Web app yêu cầu người dùng xác thực email trước khi sử dụng ứng dụng. Thay vì các bạn phải tự xây dựng chức năng này thì từ version 5.7 trở đi, Laravel đã thêm vào một tính năng mới là Email Verification. Như tên gọi khi sử dụng nó website của bạn sẽ buộc người dùng phải verify email mới có thể truy cập vào nội dung trang web của bạn. Cùng tìm hiểu xem cách sử dụng và cách Email Verification hoạt động như thế nào nhé.

Thực hiện chạy composer để cài đặt laravel mới nhất ở thời điểm hiện tại version 5.7, sau đó vào folder migration mở file create_users_table.php, chúng ta sẽ thấy tại function up() có thêm 1 trường email_verified_at. Đây là trường sẽ xác định người dùng đã verify email hay chưa bằng việc cập nhật timestamp.

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

Thực thi migrate với php artisan

php artisan migrate

Vào model User, ta sẽ thấy model này sử dụng thêm 1 namespace mới: MustVerifyEmail, nó là một Contract. Và để sử dụng được Email Verification, model User sẽ phải implements contract này.

class User extends Authenticatable implements MustVerifyEmail

Tạo Auth bằng câu lệnh

php artisan make:auth

Từ version 5.7, tại Controller ta sẽ thấy thêm AuthVerificationController, đây là controller sẽ xử lý việc verify email người dùng gồm việc gửi link xác minh, xác thực việc người dùng đã xác minh email hay chưa và gửi lại email theo yêu cầu. Để sử dụng controller này, tại file web.php ta sẽ thêm option verify vào Auth::routes();

Auth::routes(['verify' => true]);

Bạn nhớ config .env email nhé.

Ok, phần setup đã xong. Giờ thử register một user nhé.

Sau khi đăng kí xong, một email với link verify sẽ được gửi đến email của bạn. Mình cut ra cho nó ngắn gọn như sau:

Verify Email Address: http://127.0.0.1:8000/email/verify/3?expires=1537031070&signature=02d96fcbe57c7b4eb46f31dfc36d16fff73b91f5e7c8477db1668dadf1834b4c

If you did not create an account, no further action is required.

Regards,Laravel

Việc còn lại là user sẽ truy cập vào link đấy, và việc verify email sẽ thành công. Tuy nhiên, nếu user chưa verify ta sẽ chặn mọi truy cập vào các nội dung khác của web, bằng việc sử dụng middleware verified mà Laravel đã cung cấp tại các route mà bạn muốn. Ví dụ:

Route::get('/', function () {
    return view('welcome');
})->middleware('verified');

Khi user truy cập vào route này, sẽ hiện thông báo

Còn khi user đã verify email, thì việc truy cập sẽ hoàn toàn bình thường và tại field email_verified_at trong bảng users sẽ hiện thị thời gian user verify email.

Việc sử dụng Email Verification rất đơn giản gồm việc cấu hình model User và route như đã hướng dẫn ở trên. Tuy nhiên, mình sẽ nói thêm cách nó hoạt động như thế nào.

Đầu tiên, ta implements MustVerifyEmail, nó là một contract (hiểu đơn giản contract là interface, contract là thuật ngữ mà ông Taylor ông gọi mà thôi             </div>
            
            <div class=

0