本文介紹jwt token在laravel中的安裝使用,解決token驗證的問題php
1、查看laravel版本選定適合本身框架的jwt版本,不一樣版本之間會有意想不到的驚喜(坑)laravel
根據本身 laravel
版本不一樣使用jwt-auth
版本建議以下:json
Laravel version | jwt-auth version |
---|---|
4.* |
0.3.* 0.4.* |
5.* && <5.5 |
0.5.* |
5.* |
1.0.* |
以上只是參考,本人在laravel5.4也成功使用了1.0.0-rc.3版本下面詳細描述下具體的安裝以及使用api
經過composer安裝的兩種方式數組
1>composer require tymon/jwt-auth 1.0.0-rc.3(本人使用的版本)直接在項目目錄下執行該命令等待安裝便可app
2>打開composer.json在require中添加以下,而後執行composer update便可,可是這樣會把composer.json中其餘的擴展也一併更新了composer
將jwt加載到項目中以後進行一下配置首先框架
執行命令:ide
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
該命令的含義是發佈jwt的配置文件,文件位置存儲在config下該文件中存儲了一系列的jwt的配置例如生存時間,token刷新時間等等建立以後執行命令
php artisan jwt:secret,該命令爲建立祕鑰在,env文件中能夠看到jwt secret
而後在服務容器中建立jwt的服務提供者打開config/app.php在'providers'數組中添加ui
use Tymon\JWTAuth\Contracts\JWTSubject;
class User extends Authenticatable implements JWTSubject
而且添加如下方法
public function getJWTIdentifier() {
return $this->getKey();
}
public function getJWTCustomClaims() {
return [];
}
而後須要更改下咱們的auth.php配置文件由於在路由時要指定何種驗證方式
'guards' => [
...
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
更改以後路由中要這樣才能生效
Route::middleware('jwt.auth')->get('users', function () {
return auth('api')->user();
});
這樣路由就能通過指定的中間件jwt.auth過濾,而後經auth('api)這裏指定了驗證方式就是對應剛剛講到的auth.php中的配置項
若是你想讓token的驗證信息更加溫暖,那麼你能夠捕獲token驗證的異常具體作法
打開文件在方法開頭使用以下代碼
app/Exceptions/Handler.phprender
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
if ($exception instanceof UnauthorizedHttpException) {
$preException = $exception->getPrevious();
if ($preException instanceof
\Tymon\JWTAuth\Exceptions\TokenExpiredException) {
return response()->json(['error' => 'TOKEN_EXPIRED']);
} else if ($preException instanceof
\Tymon\JWTAuth\Exceptions\TokenInvalidException) {
return response()->json(['error' => 'TOKEN_INVALID']);
} else if ($preException instanceof
\Tymon\JWTAuth\Exceptions\TokenBlacklistedException) {
return response()->json(['error' => 'TOKEN_BLACKLISTED']);
}
if ($exception->getMessage() === 'Token not provided') {
return response()->json(['error' => 'Token not provided']);
}
}
每一error都能自定義你本身的提示語
下面是獲取token的方法
在控制器中使用use JWTAuth;
讀取到用戶信息將用戶信息做爲參數例如