Hướng dẫn create bearer token php

Chào các bạn, mình đã trở lại rồi đây. Ở bài viết lần trước, mình đã giới thiệu cho các bạn về Json Web Token và cách thức hoạt động của nó. Các bạn có thể xem lại ở đây để hiểu rõ hơn về phần lý thuyết trước nhé.

Trong bài viết này, mình sẽ hướng dẫn các bạn viết API phục vụ cho việc đăng ký, đăng nhập với JWT Authentication [Laravel 8]. Mình sẽ cùng nhau tìm hiểu cách bảo vệ các RESTful APIs của chúng ta bằng việc sử dụng thư viện tymondesigns/jwt-auth.

1. Giới thiệu

Tại sao lại cần phải bảo mật API? Thật đơn giản, nó cũng giống như việc bạn đi vào một khách sạn vậy, muốn vào một căn phòng nào đó của khách sạn thì trước hết bạn phải qua lễ tân. Tại đây lễ tân sẽ tiến hành kiểm tra chứng mình thư, thẻ căn cước,... để xác thực được danh tính của bạn. Thì API cũng như vậy, trước ghi đáp ứng request mà bạn gửi lên, server cũng cần phải kiểm tra "chứng minh thư" của bạn để xác thực rõ xem bạn là ai, bạn đến từ đâu


Trong bài viết này mình xin giới thiệu đến các bạn một cô lê tân vô cùng xinh đẹp, khá lớn tuổi nhưng làm việc vẫn rất hiệu quả và ổn định - JWT [Json Web Token]

2. Cài đặt Project

Đầu tiên, ta hãy cùng nhau tạo ra 1 project laravel nhé.
Cài đặt thông qua composer:
$ composer create-project laravel/laravel jwt-auth

Nếu bạn có Laravel installer, bạn có thể chạy lệnh sau:
$ laravel new jwt-auth

Tiếp theo đó, config lại file .env để kết nối đến cơ sở dữ liệu

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=jwt
DB_USERNAME=root
DB_PASSWORD=MẬT_KHẨU_MYSQL

Đưa bảng users có sẵn của laravel vào database:
$ php artisan migrate

3. Cài đặt và cấu hình package JWT Authentication

Để cài đặt JWT dùng câu lệnh composer sau:
$ composer require tymon/jwt-auth:^1.0.2

Lưu ý: Nếu sử dụng composer require tymon/jwt-auth thì nó sẽ tải bản 0.5.12 và bạn sẽ gặp lỗi này:

    - Root composer.json requires tymon/jwt-auth ^0.5.12 -> satisfiable by tymon/jwt-auth[0.5.12].
    - tymon/jwt-auth 0.5.12 requires illuminate/support ~5.0 -> found illuminate/support[v5.0.0, ..., 5.8.x-dev] but these were not loaded, likely because it conflicts with another require.

Mở file config/app.php và thêm provider sau vào mảng providers:

'providers' => [
    ....
    ....
    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
],

Thêm các facades sau vào mảng aliases:

'aliases' => [
    ....
    'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
    'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
    ....
],

Tiếp đó, sử dụng lệnh sau để public các file JWT Auth từ trong vendor sang config/jwt.php:
$ php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Như các bạn đã biết, để mã hóa chuỗi token, ta phải sử dụng một khóa bí mật [secret key]. Sử dụng lệnh sau để tạo secret key:
php artisan jwt:secret

Kiểm tra file .env, ta thấy một chuỗi bí mật ngẫu nhiên được sinh ra:
JWT_SECRET=RAdSX8gnctMMhuLO7nG7XtlE9Ijq4thvp3NlvlvdUdj8buZ76qd19O3jm7SeUZlM

4. Thiết lập model User

Lớp User sẽ implement interface Tymon\JWTAuth\Contracts\JWTSubject. Khi đó ta phải override lại 2 phương thức sau:

  • getJWTIdentifier[]
  • getJWTCustomClaims[]

Khi đó lớp User sẽ như sau:

Chủ Đề