Hướng dẫn php artisan jwt:secret

Với sự hoành tráng của mô hình client server -- WEB API thì khái niệm api không còn lạ với chúng ta nữa. Với sự hoành tráng của mô hình client server -- WEB API thì khái niệm api không còn lạ với chúng ta nữa. 

2021-07-06 2838 lượt xem

  1. Trang Chủ
  2. laravel
  3. Hướng dẫn sử dụng jwt token với laravel php sử dụng thư viện tymon auth

hùng đẹp trai

ahihi đồ ngốc trương thanh hùng nè

hùng đẹp trai

hùng đẹp trai

ahihi đồ ngốc trương thanh hùng nè

hùng thông minh lắm

tôi thích vậy đó

Và JWT token cũng thế, ở khuôn khổ bài này mình không nói về jwt là gì. Mình chỉ hướng dẫn cho các bạn cách nhúng jwt vào laravel cho api.

tôi thích vậy đó

ahihi đồ ngốc trương thanh hùng nè

ahihi đồ ngốc trương thanh hùng nè

đọc dữ liệu hộ bố

1. cài package

hùng ebudezain

hùng ebudezain

hùng thông minh lắm

ahihi đồ ngốc trương thanh hùng nè

đọc dữ liệu hộ bố

ahihi đồ ngốc trương thanh hùng nè

ahihi đồ ngốc trương thanh hùng nè

hùng ebudezain

Chạy lệnh thông qua composer : 

hùng ebudezain

bài viết được viết bởi trương thanh hùng //ebudezain.com/

composer require tymon/jwt-auth

hùng ebudezain

2. config provider và alias

hùng ebudezain

tôi thích vậy đó

đọc dữ liệu hộ bố

tôi thích vậy đó

đọc dữ liệu hộ bố

hùng ebudezain

hùng đẹp trai

đọc dữ liệu hộ bố

Sau khi install package hoàn tất, bạn cần thêm service provider vào mảng provider trong file config app.php :

hùng đẹp trai

bài viết được viết bởi trương thanh hùng //ebudezain.com/

Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class,

tôi thích vậy đó

hùng thông minh lắm

tôi thích vậy đó

tôi thích vậy đó

tôi thích vậy đó

cũng tại file app.config đó bạn thêm aliases cho 2 lớp thường dùng: 

bài viết được viết bởi trương thanh hùng //ebudezain.com/

đọc dữ liệu hộ bố

'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory'::class,

bài viết được viết bởi trương thanh hùng //ebudezain.com/

hùng thông minh lắm

hùng đẹp trai

hùng đẹp trai

3. tạo file config để jwt hoạt động

tôi thích vậy đó

hùng đẹp trai

hùng ebudezain

ahihi đồ ngốc trương thanh hùng nè

Sau cùng bạn cần publish config của jwt [ kiểu như nó tạo cái file config vào hệ thống laravel ]

tôi thích vậy đó

hùng đẹp trai

ahihi đồ ngốc trương thanh hùng nè

hùng ebudezain

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

ahihi đồ ngốc trương thanh hùng nè

4. Tạo secret key

đọc dữ liệu hộ bố

hùng ebudezain

đọc dữ liệu hộ bố

tôi thích vậy đó

hùng đẹp trai

đọc dữ liệu hộ bố

hùng ebudezain

hùng đẹp trai

hùng thông minh lắm

hùng ebudezain

Theo lý thuyết jwt dĩ nhiên muốn tạo ra 1 token bạn cần cung cấp 1 secret key 
tạo secret key trong laravel khá dễ : 

hùng đẹp trai

hùng đẹp trai

Nếu bạn sử dụng jwt để thực hiện xác thực cho việc trao đổi thông tin giữa 2 server 
thì 2 key của 2 server phải giống nhau thì mới có thể giải mã được ... 

Vì vậy, bạn có thể tạo 1 key bất kỳ bên server này và copy cho server kia. 

hùng đẹp trai

đọc dữ liệu hộ bố

hùng đẹp trai

tôi thích vậy đó

hùng ebudezain

hùng ebudezain

đọc dữ liệu hộ bố

bài viết được viết bởi trương thanh hùng //ebudezain.com/

bài hướng dẫn giải mã jwt của php laravel trong nodejs 

bài viết được viết bởi trương thanh hùng //ebudezain.com/

ahihi đồ ngốc trương thanh hùng nè

ahihi đồ ngốc trương thanh hùng nè

5. sửa lại model user để tiêm cái id user vào claim

hùng thông minh lắm

hùng đẹp trai

bạn cần implements cái interface tên JWTSubject và thực thi 2 phương thức getJWTIdentifier, getJWTCustomClaims mục tiêu là để khi tạo token thì jwt của bạn được gắn chặt với 1 vái value là id của user. Sau đó khi giải mã thì ta được 1 object user tương ứng

tôi thích vậy đó

bài viết được viết bởi trương thanh hùng //ebudezain.com/

ahihi đồ ngốc trương thanh hùng nè

namespace App\Models;

/// ... 
use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject
{
    use HasFactory, Notifiable;

     /**
     * @return int
     */
    public function getJWTIdentifier[] {
        
        return $this->getKey[];
    }
    
    /**
     * @return array
     */
    public function getJWTCustomClaims[] {
        return [
            "iss" => "//localhost",
            "ahihi" => "đồ ngốc CustomClaims"
        ];
    }
    //// ..... 
}

hùng đẹp trai

hùng ebudezain

hùng ebudezain

bài viết được viết bởi trương thanh hùng //ebudezain.com/

bài viết được viết bởi trương thanh hùng //ebudezain.com/

tôi thích vậy đó

bài viết được viết bởi trương thanh hùng //ebudezain.com/

6. lưu ý thông tin file config

hùng ebudezain

bài viết được viết bởi trương thanh hùng //ebudezain.com/

Secret Key - secret

hùng thông minh lắm

ahihi đồ ngốc trương thanh hùng nè

Cái tên nói lên tất cả 😄 Mục 4 mình vừa trình bày là cái key này, khi bạn muốn 2 server giải mã qua lại thì 2 server phải có key giống nhau.
Mặc định load trong env cái biến JWT_SECRET không thì nó lấy đại 

hùng ebudezain

hùng đẹp trai

hùng thông minh lắm

đọc dữ liệu hộ bố

hùng đẹp trai

hùng đẹp trai

hùng ebudezain

'secret' => env['JWT_SECRET', 'hung-dep-trai'],

hùng thông minh lắm

bài viết được viết bởi trương thanh hùng //ebudezain.com/

hùng thông minh lắm

JWT time to live - ttl

bài viết được viết bởi trương thanh hùng //ebudezain.com/

ahihi đồ ngốc trương thanh hùng nè

hùng đẹp trai

hùng đẹp trai

hùng thông minh lắm

1 token tạo ra phải có thười gian sống [tính bằng phút]. Khuyến nghị ngắn thôi. 

hùng ebudezain

Refresh time to live - refresh_ttl

đọc dữ liệu hộ bố

tôi thích vậy đó

đọc dữ liệu hộ bố

hùng thông minh lắm

đọc dữ liệu hộ bố

ahihi đồ ngốc trương thanh hùng nè

đọc dữ liệu hộ bố

hùng đẹp trai

Đây là thời gian [tính bằng phút] bạn có thể tạo mới một token khác từ token cũ mà ko cần xác thực lại... 

hùng ebudezain

hùng đẹp trai

hùng ebudezain

bài viết được viết bởi trương thanh hùng //ebudezain.com/

hùng đẹp trai

tôi thích vậy đó

tôi thích vậy đó

tôi thích vậy đó

hùng đẹp trai

hùng đẹp trai

'refresh_ttl' => 20160, //2 week

đọc dữ liệu hộ bố

hùng ebudezain

Tạo một token đơn giản

bài viết được viết bởi trương thanh hùng //ebudezain.com/

ahihi đồ ngốc trương thanh hùng nè

đọc dữ liệu hộ bố

Tạo một token dự trên user

hùng đẹp trai

hùng ebudezain

Chủ Đề