Laravel使用JWT實現API用戶授權的詳細步驟

本篇文章給大家帶來的內容是關于laravel使用jwt實現api用戶授權的詳細步驟,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

第一部分 安裝JWT

第一步. 使用Composer安裝 tymon/jwt-auth :

`composer require tymon/jwt-auth 1.0.0-rc.3

第二步. 添加服務提供商(Laravel5.4及以下版本,5.5及以上版本無需添加),

將下面這行添加至 config/app.php 文件 providers 數組中:

<?php // 文件:app.php 'providers' => [     // other code     TymonJWTAuthProvidersLaravelServiceProvider::class, ]

第三步. 發布配置文件,
運行如下命令發布 jwt-auth 的配置文件: ?

php artisan vendor:publish –provider=”TymonJWTAuthProvidersLaravelServiceProvider”

第四步. 生成密鑰,

此命令會在你的 .env 文件中新增一行 JWT_SECRET=secret。 ?
php artisan jwt:secret

第二部分 開始配置

第五步. 配置 Auth guard,`
在 config/auth.php 文件中,你需要將 guards/driver 更新為 jwt, ?
只有在使用 Laravel 5.2 及以上版本的情況下才能使用。

<?php     'defaults' => [     'guard' => 'api',     'passwords' => 'users', ], // other code 'guards' => [     'api' => [         'driver' => 'jwt',         'provider' => 'users',     ], ],

第六步. 更改 User Model,
在User Model上實現TymonJWTAuthContractsJWTSubject接口,
實現getJWTIdentifier() and getJWTCustomClaims()兩個方法。

<?php namespace App;  use TymonJWTAuthContractsJWTSubject;  class User extends Authenticatable implements JWTSubject {     // other code      // Rest omitted for brevity          /**      * Get the identifier that will be stored in the subject claim of the JWT.      *      * @return mixed      */     public function getJWTIdentifier()     {         return $this->getKey();     }      /**      * Return a key value array, containing any custom claims to be added to the JWT.      *      * @return array      */     public function getJWTCustomClaims()     {         return [];     } }

第三部分 快速創建DEMO測試

第七步. 添加一些基本身份驗證路由:

<?php Route::group([     'middleware' => 'api',     'prefix' => 'auth' ], function ($router) {     Route::post('login', 'AuthController@login');     Route::post('register', 'AuthController@register');     Route::post('logout', 'AuthController@logout');     Route::post('refresh', 'AuthController@refresh');     Route::post('me', 'AuthController@me'); });

第八步. 創建AuthController控制器 => php artisan make:controller AuthController:

<?php namespace AppHttpControllers;  use AppUser; use IlluminateHttpRequest; use IlluminateSupportFacadesValidator;  class AuthController extends Controller {     /**      * Create a new AuthController instance.      *      * @return void      */     public function __construct()     {         $this->middleware('auth:api', ['except' => ['login', 'register']]);     }      /**      * 用戶使用郵箱密碼獲取JWT Token.      *      * @return IlluminateHttpJsonResponse      */     public function login()     {         $credentials = request(['email', 'password']);          if (! $token = auth()->attempt($credentials)) {             return response()->json(['error' => 'Unauthorized'], 401);         }          return $this->respondWithToken($token);     }      /**      * 注冊新用戶      */     public function register(Request $request)     {         // 數據校驗         // 數據驗證         $validator = Validator::make($request->all(), [             'name'       => 'required',             'email'      => 'required|email',             'password'   => 'required',             'c_password' => 'required|same:password'         ]);          if ($validator->fails()) {             return response()->json(['error'=>$validator->errors()], 401);         }          // 讀取參數并保存數據         $input = $request->all();         $input['password'] = bcrypt($input['password']);         $user = User::create($input);          // 創建Token并返回         return $user;     }      /**      * 獲取經過身份驗證的用戶.      *      * @return IlluminateHttpJsonResponse      */     public function me()     {         return response()->json(auth()->user());     }      /**      * 刷新Token.      *      * @return IlluminateHttpJsonResponse      */     public function refresh()     {         return $this->respondWithToken(auth()->refresh());     }       /**      * Get the token array structure.      *      * @param  string $token      *      * @return IlluminateHttpJsonResponse      */     protected function respondWithToken($token)     {         return response()->json([             'access_token' => $token,             'token_type' => 'bearer',             'expires_in' => auth()->factory()->getTTL() * 60         ]);     } }

第九步. 使用Postman測試API: ?

Laravel使用JWT實現API用戶授權的詳細步驟

Laravel使用JWT實現API用戶授權的詳細步驟

測試API數據獲取,需要在headers中添加Token; ?格式

key=Authorization,value=Bearer空格token

Laravel使用JWT實現API用戶授權的詳細步驟

Token刷新:

Laravel使用JWT實現API用戶授權的詳細步驟

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享