JWT (JSON Web Tokens) Trong Laravel - Hoclaptrinh
Bài viết này sẽ giúp các bạn biết được cơ bản cách dùng JWT trong laravel version 5.7
Cài đặt project
Trước hết sử dụng câu lệnh composer để cài đặt một project laravel
composer create-project --prefer-dist laravel/laravel jwt-laravel
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=YOUR_DB_NAME DB_USERNAME=YOUR_MYSQL_USERNAME DB_PASSWORD=YOUR_MYSQL_PASSWORDVí dụ dưới đây sẽ sử dụng cấu trúc database user có sẵn của laravel
php artisan:migrate
Cài đặt JWT
Cài đặt
Để cài đặt JWT dùng câu lệnh composer sau:
composer require tymon/jwt-auth:dev-develop --prefer-source
Thêm JWT Service provider và Facade:
Mở file config/app.php, tìm mảng providers và thêm jwt-auth provider:
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
Tiếp tục tìm đến mảng aliases và thêm jwt-auth facade như sau:
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
Config
Pulish file config của jwt:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
Và tạo key cho jwt:
php artisan jwt:secret
Nó sẽ tự động sinh ra key JWT_SECRET trong file .env
Sử dụng JWT trong laravel
Models
Khi người dùng đăng nhập thành công, một token sẽ được sinh ra và trả về cùng model user. Model user sẽ implement JWTSubject. Update lại model user như dưới đây
namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Tymon\JWTAuth\Contracts\JWTSubject; class User extends Authenticatable implements JWTSubject { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; public function getJWTIdentifier() { return $this->getKey(); } public function getJWTCustomClaims() { return []; } }Form Request
Chúng ta validate sử dụng form request. Tạo form request cho việc đăng ký:
php artisan make:request RegisterFormRequest
File tạo mới sẽ nằm trong thư mục app\Http\Requests. Với những thông tin đăng ký: tên người dùng (name) bắt buộc, là một chuỗi có độ dài max 255 ký tự. Email bắt buôc có format của một email và không được trùng với các email khác đã tồn tại. Password bắt buộc là một chuỗi ký tự độ dài tối thiểu là 1 và tối đã là 6:
namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class RegisterFormRequest extends FormRequest { /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' => 'required|string', 'email' => 'required|email|unique:users', 'password' => 'required|string|min:6|max:10', ]; } }Controller
Tạo controller với nhiệm vụ đăng ký, login, logout và reset password
php artisan make:controller AuthController
Mở file app\Http\Controllers\AuthController.php và update chúng:
<?php namespace App\Http\Controllers; use App\Http\Requests\RegisterFormRequest; use Illuminate\Support\Facades\Auth; use Tymon\JWTAuth\Facades\JWTAuth; use Illuminate\Http\Request; use Illuminate\Http\Response; use App\User; class AuthController extends Controller { public function register(RegisterFormRequest $request) { $params = $request->only('email', 'name', 'password'); $user = new User(); $user->email = $params['email']; $user->name = $params['name']; $user->password = bcrypt($params['password']); $user->save(); return response()->json($user, Response::HTTP_OK); } public function login(Request $request) { $credentials = $request->only('email', 'password'); if (!($token = JWTAuth::attempt($credentials))) { return response()->json([ 'status' => 'error', 'error' => 'invalid.credentials', 'msg' => 'Invalid Credentials.' ], Response::HTTP_BAD_REQUEST); } return response()->json(['token' => $token], Response::HTTP_OK); } public function user(Request $request) { $user = Auth::user(); if ($user) { return response($user, Response::HTTP_OK); } return response(null, Response::HTTP_BAD_REQUEST); } /** * Log out * Invalidate the token, so user cannot use it anymore * They have to relogin to get a new token * * @param Request $request */ public function logout(Request $request) { $this->validate($request, ['token' => 'required']); try { JWTAuth::invalidate($request->input('token')); return response()->json('You have successfully logged out.', Response::HTTP_OK); } catch (JWTException $e) { return response()->json('Failed to logout, please try again.', Response::HTTP_BAD_REQUEST); } } public function refresh() { return response(JWTAuth::getToken(), Response::HTTP_OK); } }Route
Update lại file api.route
Route::post('signup', 'AuthController@register'); Route::post('login', 'AuthController@login'); Route::group(['middleware' => 'jwt.auth'], function () { Route::get('auth', 'AuthController@user'); Route::post('logout', 'AuthController@logout'); }); Route::middleware('jwt.refresh')->get('/token/refresh', 'AuthController@refresh');Kiểm tra với postman.
Sử dụng postman để kiểm tra Đăng ký user
Đăng nhập
Kiểm tra thông tin user
Refresh token
Đăng xuất
Từ khóa » Jwt Trong Php
-
API Authentication Sử Dụng JWT Trong PHP(Phalcon) * Gsviec
-
Xác Thực Người Dùng Với JWT Cho Web API - CodeLearn
-
API Authentication Sử Dụng JWT Trong Laravel - Viblo
-
Laravel 8 - Sử Dụng Authentication Json Web Token (JWT) - Viblo
-
Hướng Dẫn Sử Dụng Jwt Token Với Laravel Php Sử Dụng Thư Viện ...
-
Xác Thực JWT (JSON Web Tokens) Dựa Trên PHP Token
-
DAY 5 - LOGIN VỚI JSON WEB TOKEN (PHP SERVER) - YouTube
-
JSON Web Token Là Gì | Từ Cơ Bản đến Chi Tiết | TopDev
-
Hỏi Về Xác Thực Người Dùng Bằng Json Web Token Trong PHP
-
API Authentication Sử Dụng JWT Trong Laravel - Hoclaptrinh
-
Php — Phiên Trong Xác Thực Dựa Trên Mã Thông Báo, Xác Thực ...
-
Xây Dựng Các API Rest Với Xác Thực JWT Trong Laravel - Morioh
-
Authentication API Trong Laravel Với JWT - AI Design - Thiết Kế Web ...
-
API Authentication Sử Dụng JWT Trong Laravel