jwt laravel 使用 jwtoken jwttoken解析token jwt生成token jwt令牌驗證


本文介紹jwt token在laravel中的安裝使用,解決token驗證的問題

一、查看laravel版本選定適合自己框架的jwt版本,不同版本之間會有意想不到的驚喜(坑)

根據自己 laravel版本不同使用jwt-auth版本建議如下:

 

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版本下面詳細描述下具體的安裝以及使用

通過composer安裝的兩種方式

1>composer require tymon/jwt-auth 1.0.0-rc.3(本人使用的版本)直接在項目目錄下執行該命令等待安裝即可

2>打開composer.json在require中添加如下,然后執行composer update即可,但是這樣會把composer.json中其他的擴展也一並更新了

"require": {
"tymon/jwt-auth": "1.0.0-rc.3"
},

將jwt加載到項目中之后進行一下配置首先

執行命令:

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
該命令的含義是發布jwt的配置文件,文件位置存儲在config下該文件中存儲了一系列的jwt的配置例如生存時間,token刷新時間等等創建之后執行命令
php artisan jwt:secret,該命令為創建jwt secret秘鑰在,env文件中可以看到

然后在服務容器中創建jwt的服務提供者打開config/app.php在'providers'數組中添加

Tymon\JWTAuth\Providers\LaravelServiceProvider::class,或者該版本指定的添加服務提供者之后在該文件下aliases中添加門面
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
添加門面之后在控制器中使用時可以直接 use JWTAuth;
要想使得我們每次的接口都經受token的驗證可以借助中間件,要使用中間件需要在app\Http\Kernel.php文件中的
$routeMiddleware數組中添加如下:
// jwttoken 中間件
'jwt.auth' => \Tymon\JWTAuth\Http\Middleware\Authenticate::class,(該中間件則按照token規則驗證)
'jwt.refresh' => \Tymon\JWTAuth\Http\Middleware\RefreshToken::class,(該中間件表示請求一次token就失效了)
添加好以上配置之后我們着手控制器和模型
在模型中
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;
讀取到用戶信息將用戶信息作為參數例如
$data={'mobile':12345667,'password:2342342}
$token = JWTAuth::fromUser($data);
這樣就能拿到token
如果我們想解析token可以使用
JWTAuth::user()
該方法可以將驗證通過的用戶信息全部提取出來
JWTAuth.php中方法
attempt()  嘗試對用戶進行身份驗證並返回令牌
authenticate()  通過令牌對用戶進行身份驗證
user()       獲取經過身份驗證的用戶


 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM