jerrygaoyang / laravel-jwt
用于编码、解码、设置token过期时间和验证的jwt auth
v1.0.5
2017-11-21 02:15 UTC
This package is not auto-updated.
Last update: 2024-09-18 04:28:40 UTC
README
安装
- 首先:使用以下命令通过composer安装此包
composer require jerrygaoyang/laravel-jwt
- 其次:将服务提供者添加到config/app.php中的providers数组中
Jerry\JWT\Providers\JWTProvider::class
- 最后:将jwt配置发布到Laravel配置路径
php artisan vendor:publish --provider="Jerry\JWT\Providers\JWTProvider"
配置
- 将JWT中间件添加到app/Http/Kenel.php中的routeMiddleware数组中
'jwt' => \Jerry\JWT\Middleware\JWTMiddleware::class,
- JWT配置在config/jwt.php中
<?php
/**
* Created by PhpStorm.
* User: gaoyang
* Date: 2017/11/14
* Time: 9:32
*/
return [
"secret" => "PIe5T3xJWAMA95Uwf7pde7gmS7ZTiURg", //jwt SHA256 signature use the secret
"expire_in" => 604800, //jwt expire_in the times(seconds) , default 604800(a week)
];
用户指南
编码和解码
use Jerry/JWT/JWT;
$payload = [
"user_id" => 1
];
$token = JWT::encode($payload);
print_r($token);
echo "<br>";
$payload = JWT::decode($token);
print_r($payload);
laravel的http api处理
- 首先:http请求必须包含header头
{
"Authorization": "jwt PIe5T3xJWAMA95Uwf7pde7gmS7ZTiURg"
}
- 其次:laravel路由使用jwt中间件
Route::middleware(['jwt'])->group(function () {
Route::get('/test2', 'TestController@test2');
});
- 最后:用户请求在您的laravel控制器中获取jwt解码后的负载
$payload = $request->get('jwt');
异常(全局用于api)
您可以将以下代码复制到您的Laravel app/Exceptions/handler.php的render函数中;
很容易更改令牌异常以供我们使用;
很容易更改返回数据以供api响应使用。
当然,我们应该
使用Jerry\JWT\Exceptions\TokenFormatException;
使用Jerry\JWT\Exceptions\TokenExpiredException;
使用Jerry\JWT\Exceptions\TokenForwardException;
使用Jerry\JWT\Exceptions\PayloadFormatException;
if ($exception instanceof TokenFormatException) {
return response()->json([
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
'data' => ''
]);
}
if ($exception instanceof TokenExpiredException) {
return response()->json([
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
'data' => ''
]);
}
if ($exception instanceof TokenForwardException) {
return response()->json([
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
'data' => ''
]);
}
if ($exception instanceof PayloadFormatException) {
return response()->json([
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
'data' => ''
]);
}