Hướng Dẫn Sử Dụng Jwt Token Với Laravel Php Sử Dụng Thư Viện ...

Ebudezain

Ebudezain

  • kiến thức web
  • nodejs
  • react
  • php
    • php core
    • laravel
  • Java
    • java core
    • android
  • SEO
  • liên hệ

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. 

Hướng dẫn sử dụng jwt token với laravel php sử dụng thư viện tymon auth 2021-07-06 4302 lượt xem Trương thị Thuỳ trang Mục lục [ hide ]
  • Cài đặt
    • 1. cài package
  • 2. config provider và alias
    • 3. tạo file config để jwt hoạt động
    • 4. Tạo secret key
    • 5. sửa lại model user để tiêm cái id user vào claim
    • 6. lưu ý thông tin file config
      • Secret Key - secret
      • JWT time to live - ttl
      • Refresh time to live - refresh_ttl
  • Tạo một token đơn giản
    • Tạo một token dự trên user
    • Tạo token dự trên một đối tượng .
    • claims - ghi thêm dữ liệu vào token
    • Tạo token từ 1 object bất kì
  • Xác thực
  • exception global
ahihi đồ ngốc trương thanh hùng nèhùng thông minh lắmbài viết được viết bởi trương thanh hùng https://ebudezain.com/đọc dữ liệu hộ bốhùng đẹp traihùng đẹp traibài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng thông minh lắmhùng ebudezain

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

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.

hùng ebudezainhùng ebudezainbài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng thông minh lắmahihi đồ ngốc trương thanh hùng nè

Cài đặt

tôi thích vậy đóhùng đẹp trai

1. cài package

hùng thông minh lắmhùng ebudezain

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

đọc dữ liệu hộ bốđọc dữ liệu hộ bốđọc dữ liệu hộ bốahihi đồ ngốc trương thanh hùng nècomposer require tymon/jwt-authhùng đẹp traibài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng ebudezainhùng ebudezainhùng thông minh lắm

2. config provider và alias

ahihi đồ ngốc trương thanh hùng nèhùng thông minh lắmhùng thông minh lắmhùng thông minh lắm

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 traihùng thông minh lắmđọc dữ liệu hộ bốahihi đồ ngốc trương thanh hùng nèTymon\JWTAuth\Providers\JWTAuthServiceProvider::class,ahihi đồ ngốc trương thanh hùng nè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 https://ebudezain.com/hùng ebudezain'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class, 'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory'::class,ahihi đồ ngốc trương thanh hùng nèahihi đồ ngốc trương thanh hùng nè

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

ahihi đồ ngốc trương thanh hùng nèahihi đồ ngốc trương thanh hùng nètôi thích vậy đó

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 )

bài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng đẹp traiphp artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"tôi thích vậy đóahihi đồ ngốc trương thanh hùng nè

4. Tạo secret key

hùng thông minh lắmahihi đồ ngốc trương thanh hùng nèahihi đồ ngốc trương thanh hùng nèbài viết được viết bởi trương thanh hùng https://ebudezain.com/ahihi đồ ngốc trương thanh hùng nè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ễ :

đọc dữ liệu hộ bốhùng đẹp traibài viết được viết bởi trương thanh hùng https://ebudezain.com/php artisan jwt:generateahihi đồ ngốc trương thanh hùng nèhùng thông minh lắmđọc dữ liệu hộ bốahihi đồ ngốc trương thanh hùng nè

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.

đọc dữ liệu hộ bốhùng thông minh lắmahihi đồ ngốc trương thanh hùng nèbài viết được viết bởi trương thanh hùng https://ebudezain.com/

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

hùng thông minh lắm

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

hùng thông minh lắmhùng ebudezainhùng thông minh lắmhùng ebudezainhùng thông minh lắmhùng thông minh lắmhùng ebudezaintôi thích vậy đó

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

hùng thông minh lắmhùng ebudezainhùng đẹp traiahihi đồ 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" => "http://localhost", "ahihi" => "đồ ngốc CustomClaims" ]; } //// ..... }hùng thông minh lắmhùng ebudezainhùng ebudezainahihi đồ ngốc trương thanh hùng nèbài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng đẹp traitôi thích vậy đóhùng đẹp traiđọc dữ liệu hộ bốđọc dữ liệu hộ bố

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

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

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

Secret Key - secret

hùng thông minh lắmahihi đồ ngốc trương thanh hùng nètôi thích vậy đóbài viết được viết bởi trương thanh hùng https://ebudezain.com/ahihi đồ ngốc trương thanh hùng nètôi thích vậy đóhùng đẹp traitôi thích vậy đó

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

bài viết được viết bởi trương thanh hùng https://ebudezain.com/ahihi đồ ngốc trương thanh hùng nèhùng đẹp trai

'secret' => env('JWT_SECRET', 'hung-dep-trai'),

bài viết được viết bởi trương thanh hùng https://ebudezain.com/tôi thích vậy đó

JWT time to live - ttl

hùng ebudezainđọc dữ liệu hộ bốhùng ebudezainhùng đẹp traihù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 thông minh lắmbài viết được viết bởi trương thanh hùng https://ebudezain.com/tôi thích vậy đó

Refresh time to live - refresh_ttl

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

Đâ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 đẹp traihùng thông minh lắmhùng ebudezainahihi đồ ngốc trương thanh hùng nè

'refresh_ttl' => 20160, //2 week

bài viết được viết bởi trương thanh hùng https://ebudezain.com/ahihi đồ ngốc trương thanh hùng nèhùng đẹp trai

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

tôi thích vậy đóđọc dữ liệu hộ bốhùng ebudezain

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

đọc dữ liệu hộ bốbài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng thông minh lắmhùng đẹp traiahihi đồ ngốc trương thanh hùng nèhùng thông minh lắm

class LoginCotnroller trong thư mục api như sau:

ahihi đồ ngốc trương thanh hùng nèhùng đẹp traiđọc dữ liệu hộ bố<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Http\Response; use Tymon\JWTAuth\Exceptions\JWTException; use Tymon\JWTAuth\Facades\JWTAuth; class LoginController extends Controller { /** * get all login * php artisan make:resource ApiAuthResource */ public function login(Request $request){ // lấy thông tin từ các request gửi lên $credentials = $request->only('email', 'password'); try { // xác nhận thông tin người dùng gửi lên có hợp lệ hay không if (! $token = JWTAuth::attempt($credentials)) { return response() ->error( 'có lỗi validate trong controller', ['error' => 'invalid_credentials'], Response::HTTP_UNAUTHORIZED ) ->setStatusCode(Response::HTTP_UNAUTHORIZED); } } catch (JWTException $e) { // Xử lý ngoại lệ return response() ->error( 'có lỗi validate trong controller', ['error' => 'could_not_create_token'], Response::HTTP_INTERNAL_SERVER_ERROR ) ->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR); } return response() ->success('Your custom login', $token) ->setStatusCode(Response::HTTP_OK); } /** * Nếu bạn sử dụng function login ở trên nhìn thấy phức tạp hay thấy gớm, khó hiểu quá thì dùng function dưới này nhìn dễ hiểu hơn 1 tí :D */ public function simpleLogin(Request $request){ // lấy thông tin từ các request gửi lên $credentials = $request->only('email', 'password'); try { // xác nhận thông tin người dùng gửi lên có hợp lệ hay không if (! $token = JWTAuth::attempt($credentials)) { return response()->json(['error' => 'invalid_credentials'], 401); } } catch (JWTException $e) { // Xử lý ngoại lệ return response()->json(['error' => 'could_not_create_token'], 500); } // xác nhận thành công thì trả về 1 token hợp lệ return response()->json(compact('token')); } } ahihi đồ ngốc trương thanh hùng nèhùng đẹp traihùng thông minh lắmđọc dữ liệu hộ bố

Tạo token dự trên một đối tượng .

bài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng ebudezainahihi đồ ngốc trương thanh hùng nè

Ngoài phương pháp thông thường, chúng ta còn có thể tạo một mã Token dựa trên một user instance như sau :

hùng đẹp traiđọc dữ liệu hộ bốhùng đẹp trai$user = User::where('email', 'hung_dep_trai@gmail.com')->first(); if(!$user){ return response()->json(['error' => 'user_not_found'], 500); } $token = JWTAuth::fromUser($user);ahihi đồ ngốc trương thanh hùng nèhùng đẹp traihùng thông minh lắmhùng thông minh lắmbài viết được viết bởi trương thanh hùng https://ebudezain.com/

claims - ghi thêm dữ liệu vào token

ahihi đồ ngốc trương thanh hùng nèhùng đẹp traitôi thích vậy đóahihi đồ ngốc trương thanh hùng nè$customClaims = ['foo' => 'bar', 'baz' => 'bob']; // JWTAuth::attempt($credentials, $customClaims); -> phương thức để login // or JWTAuth::fromUser($user, $customClaims);hùng thông minh lắmhùng đẹp traiđọc dữ liệu hộ bốhùng đẹp traibài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng ebudezainhùng đẹp traiahihi đồ ngốc trương thanh hùng nètôi thích vậy đó

Và đương nhiên, những dữ liệu bạn ghi thêm vào sẽ có mặt cùng với những dữ liệu khác khi giải mã token.

ahihi đồ ngốc trương thanh hùng nèhùng đẹp traihùng đẹp traitôi thích vậy đóhùng ebudezainbài viết được viết bởi trương thanh hùng https://ebudezain.com/ahihi đồ ngốc trương thanh hùng nèhùng thông minh lắm

Lưu ý: Hết sức chú ý những dữ liệu bạn ghi thêm vào token vì chúng sẽ làm tăng độ dài cũng như dung lượng của token

đọc dữ liệu hộ bốbài viết được viết bởi trương thanh hùng https://ebudezain.com/ahihi đồ ngốc trương thanh hùng nè

Tạo token từ 1 object bất kì

hùng ebudezainhùng thông minh lắmhùng thông minh lắm$customClaims = ['foo' => 'bar', 'baz' => 'bob']; $payload = JWTFactory::make($customClaims); $token = JWTAuth::encode($payload);hùng đẹp trai

Xác thực

hùng ebudezainhùng ebudezainhùng thông minh lắmahihi đồ ngốc trương thanh hùng nèbài viết được viết bởi trương thanh hùng https://ebudezain.com/tôi thích vậy đó

Có token rồi thì khi người dùng gọi api phải gửi lên kèm header hoặc query params Với token này thì server có thể check token đó đúng không ? nếu đúng thì lấy được thông tin đăng nhập .

hùng ebudezainahihi đồ ngốc trương thanh hùng nèhùng đẹp traitôi thích vậy đó

Đoạn mã đó có dạng như sau :

hùng thông minh lắmahihi đồ ngốc trương thanh hùng nèhùng ebudezaintôi thích vậy đótôi thích vậy đóhùng đẹp traiđọc dữ liệu hộ bốhùng thông minh lắmhùng đẹp traihùng thông minh lắmđọc dữ liệu hộ bốhùng ebudezain

Authorization: Bearer {your_token_here}

hùng đẹp traibài viết được viết bởi trương thanh hùng https://ebudezain.com/hùng ebudezainhùng thông minh lắmtôi thích vậy đó

ví dụ cụ thể:

hùng thông minh lắmđọc dữ liệu hộ bốhùng ebudezainhùng đẹp traiGET /api/v1/users HTTP/1.1 Host: localhost:80 User-Agent: rest-client Accept-Language: en-GB,en-US;q=0.8,en;q=0.6,zh-CN;q=0.4 Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3RcL2FwaVwvdjFcL2xvZ2luIiwiaWF0IjoxNjI1NTMwNDY2LCJleHAiOjE2MjU1MzQwNjYsIm5iZiI6MTYyNTUzMDQ2NiwianRpIjoibFhCZUlmMFFOMk9rTGlOZSIsInN1YiI6MiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.nAGhQWgLSPd-yX_xMRvNn82NZpXjMBKY61G0FHiIxV0 content-type: application/json ################################tôi thích vậy đóđọc dữ liệu hộ bốhùng ebudezainhùng thông minh lắmhùng ebudezainbài viết được viết bởi trương thanh hùng https://ebudezain.com/tôi thích vậy đóhùng thông minh lắmhùng đẹp trai

Hoặc nếu bạn không muốn sử dụng header thì có thể sử dụng query string . Ví dụ

ahihi đồ ngốc trương thanh hùng nèđọc dữ liệu hộ bốđọc dữ liệu hộ bốhttp://domain.xyz/users?token={your_token_here}hùng thông minh lắmhùng ebudezainbài viết được viết bởi trương thanh hùng https://ebudezain.com/ahihi đồ ngốc trương thanh hùng nèbài viết được viết bởi trương thanh hùng https://ebudezain.com/bài viết được viết bởi trương thanh hùng https://ebudezain.com/

Để lấy token từ đoạn mã gửi lên thì bạn có thể làm như sau:

hùng đẹp traihùng đẹp traiJWTAuth::parseToken(); $user = JWTAuth::parseToken()->authenticate();hùng ebudezainhùng thông minh lắm

Để lấy giá trị token thì có thể làm như sau :

đọc dữ liệu hộ bốđọc dữ liệu hộ bố$token = JWTAuth::getToken();đọc dữ liệu hộ bốtôi thích vậy đóahihi đồ ngốc trương thanh hùng nèhùng đẹp traipublic function getAuthenticatedUser() { try { if (! $user = JWTAuth::parseToken()->authenticate()) { return response()->json(['user_not_found'], 404); } } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) { return response()->json(['token_expired'], $e->getStatusCode()); } catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) { return response()->json(['token_invalid'], $e->getStatusCode()); } catch (Tymon\JWTAuth\Exceptions\JWTException $e) { return response()->json(['token_absent'], $e->getStatusCode()); } return response()->json(compact('user')); }hùng ebudezainhùng thông minh lắmbài viết được viết bởi trương thanh hùng https://ebudezain.com/ahihi đồ ngốc trương thanh hùng nèhùng ebudezain

exception global

ahihi đồ ngốc trương thanh hùng nèhùng thông minh lắmđọc dữ liệu hộ bốhùng ebudezain

Mình sẽ viết 1 bài nói về cách dùng exception trong laravel trông có vẻ xịn hơn khi viết api hay xử lý các vấn đề về error để code clean hơn. Riêng phần này mình nói ngắn gọn để bắt lỗi exception global là bạn vào file app/Exceptions/Handler.php: bnaj thêm khúc này vào để xuất json:

tôi thích vậy đóhùng thông minh lắmpublic function render($request, Exception $e) { if ($e instanceof Tymon\JWTAuth\Exceptions\TokenExpiredException) { return response()->json(['token_expired'], $e->getStatusCode()); } else if ($e instanceof Tymon\JWTAuth\Exceptions\TokenInvalidException) { return response()->json(['token_invalid'], $e->getStatusCode()); } return parent::render($request, $e); }chủ đề laravel

laravel

2020-10-28
laravel là 1 trong những framework php được dùng p...
những tag php developer

php developer

2020-10-26
php developer
bài viết trong chủ đề Sharing data đến tất cả các view trong laravel php - view share

Sharing data đến tất cả các view trong laravel php - view share

2021-01-02
Đôi khi bạn cần đặt cùng một data trong nhiều view...
tích hợp ckeditor và ckfinder vào website laravel

tích hợp ckeditor và ckfinder vào website laravel

2021-01-16
Bài này mình sẽ hướng dẫn tích hợp CKEditor và CKF...
sử dụng storage google drive trong laravel - part 1

sử dụng storage google drive trong laravel - part 1

2020-11-06
sử dụng storage google drive trong laravel phần 1....
Cơ chế xử lý request trong Laravel

Cơ chế xử lý request trong Laravel

2021-01-04
bài viết này mình xin giới thiệu về cách thức lara...
Gates trong laravel

Gates trong laravel

2021-01-17
trong bài viết này mình chỉ đề cập đến gate trong ...
cơ chế xác thực access token và refresh token

cơ chế xác thực access token và refresh token

2020-11-20
cơ chế xác thực access token và refresh token
Cách lấy referrer trong PHP và Laravel

Cách lấy referrer trong PHP và Laravel

2021-02-09
Cách lấy referrer trong PHP và Laravel
Tối ưu Queries Database và tăng Performance trong laravel

Tối ưu Queries Database và tăng Performance trong laravel

2022-02-14
Xử lý query database tối ưu trong laravel
sử dụng storage google drive trong laravel - part 2

sử dụng storage google drive trong laravel - part 2

2020-11-06
sử dụng storage google drive trong laravel
sử dụng storage google drive trong laravel - part 3

sử dụng storage google drive trong laravel - part 3

2020-11-06
sử dụng storage google drive trong laravel - part ...
fix lỗi Argument 3 passed to Lcobucci JWT Signer Hmac doVerify must be an instance of Lcobucci JWT Signer Key

fix lỗi Argument 3 passed to Lcobucci JWT Signer Hmac doVerify must be an instance of Lcobucci JWT Signer Key

2021-07-11
Bạn đang làm việc trên jwt ngon quá chời rồi pull ...
Làm thế nào để sử dụng translations trong laravel vào js

Làm thế nào để sử dụng translations trong laravel vào js

2021-03-02
Sau một số nghiên cứu về chủ đề translate trong la...
Cài đặt mongo cho php laravel

Cài đặt mongo cho php laravel

2021-06-28
trong laravel nếu bạn muốn nạp mongo db vào trong ...
Hướng dẫn cài đặt ReactJs trong project Laravel

Hướng dẫn cài đặt ReactJs trong project Laravel

2021-07-12
Single Page App (SPA) đang rất được các dev ưa chu...
Cách Set, Get và Delete Cookies trong Laravel.

Cách Set, Get và Delete Cookies trong Laravel.

2022-01-23
Trong bài đăng này, chúng ta sẽ tìm hiểu cách Set,...
bài viết mớiXem và Quản lý user - group và phân quyền trên linux

Xem và Quản lý user - group và phân quyền trên linux

2021-01-02
Mình là dev web và việc phân chia quyền ...
Cài đặt docker trên ubuntu 18.04 - Cách Install Docker Ubuntu

Cài đặt docker trên ubuntu 18.04 - Cách Install Docker Ubuntu

2023-01-19
Trong bài hướng dẫn này, chúng tôi sẽ ch...
cách export và import database postgre

cách export và import database postgre

2021-03-10
Bài này hướng dẫn bạn cách backup databa...
Download và cài đặt xdebug cho php fpm MacOs

Download và cài đặt xdebug cho php fpm MacOs

2021-01-10
mình đã từng cài xdebug, Cài thông qua P...
list view trong android căn bản

list view trong android căn bản

2020-10-20
list view trong android căn bản
3 con đường để Copy Objects trong JavaScript

3 con đường để Copy Objects trong JavaScript

2020-10-10
cách copy object trong javascript. trong...
bài viết có liên quanfix lỗi fatal: Authentication failed for https Git gỡ bỏ xác thực mật khẩu

fix lỗi fatal: Authentication failed for https Git gỡ bỏ xác thực mật khẩu

2021-08-23
Mọi thứ đang bình thường thì nay là 2021...
Cài đặt Flutter trên MacOS 2021

Cài đặt Flutter trên MacOS 2021

2021-03-01
Flutter là 1 framework do google phát tr...
phân biệt trình biên dịch - thông dịch

phân biệt trình biên dịch - thông dịch

2020-09-30
phân biệt trình biên dịch - thông dịch
Hướng dẫn cài đặt Nginx PHP-FPM trên MacOS sử dụng Homebrew

Hướng dẫn cài đặt Nginx PHP-FPM trên MacOS sử dụng Homebrew

2020-12-17
Trong quá trình phát triển web với php c...
Hướng dẫn cơ bản về cách kết hợp Laravel 8 với ReactJS React Router 2021

Hướng dẫn cơ bản về cách kết hợp Laravel 8 với ReactJS React Router 2021

2021-07-20
Chủ đề hướng dẫn Laravel 8 ReactJS, chún...
Run chương trình php với command

Run chương trình php với command

2020-09-30
Sau khi cài đặt xong xampp trong windows...

Ebudezain blog - chia sẽ kiến thức lập trình

Ebudezain Blog là trang chuyên chia sẻ các kiến thức về lập trình nhằm mang lại cho lập trình viên mới có kiến thức lập trình nền tảng nhất dưới góc nhìn của mình.

EBUDEZAIN

Ebudezain - chúng tôi là đơn vị thiết kế web uy tín, chất lượng, với chi phí tiết kiệm. Nếu bạn có nhu cầu thiết kế web, hãy gọi cho chúng tôi.

0674, Xã Bình Giã,Huyện Châu Đức Tỉnh Bà Rịa - Vũng Tàu,Việt Nam

+84343086424

thanhhung.dev@gmail.com

[JAVASCRIPT Cơ bản] javascript core DynamoDB WebRTC trong browser Nha Đam [PHP TỔNG HỢP] các kiến thức lập trình về php marketing lodash kiến thức database Flutter. redis WebRTC trong android CI CD React Native docker fix lỗi kiến thức front-end Unit test laravel Shell script GraphQL kiến thức web git cơ bản SEO - Search Engine Optimization Amazon Web Services (AWS) bảng giá website [PHP CƠ BẢN] PHP CORE - Lập trình căn bản với php nextjs android Load balancing [JAVA Cơ bản] java core laravel flutter tutorial [NODEJS CƠ BẢN] platform nodejs - V8 JavaScript Runtime javascript VScode linux grunt Unit test trong reactjs flutter cơ bản đến nâng cao MOMENT JS react công ty tui front-end developer flutter fix lỗi linh tinh mongo thao tác với vps linux aws React Native nâng cao php developer postgre google drive single page applycation Tự học React native Amazon Web Services (AWS) - Amplify github cli lưu trữ với google drive RESTful API loạt bài lập trình shell script bash script calendar kiến thức server linux sass scss - preprocessor macbook nodejs

Từ khóa » Jwt Trong Php