- 使用Composer安装JWT包
composer require firebase/php-jwt
- 生成Token和验证Token方法
<?php
namespace App\Service;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
class Token
{
protected $key;
public function __construct()
{
$this->key = 'AIDJANLG6LASLADGASD5L6K6H9SF8AG85G9S13G3GHG7613GH6G';
}
public function createToken($userId)
{
$payload = array(
"iss" => "",
"aud" => "",
"iat" => time(),
"nbf" => time(),
"exp" => time()+7200,
"uid" => $userId
);
$jwt = JWT::encode($payload, $this->key, 'HS256');
return $jwt;
}
public function decodeToken($jwt)
{
try {
$decoded = JWT::decode($jwt, new Key($this->key, 'HS256'));
return $decoded;
} catch (\Exception $exception) {
return $exception->getMessage();
}
}
}
- 创建Token中间件进行验证
<?php
namespace App\Http\Middleware;
use App\Service\Token;
use Closure;
use Illuminate\Http\Request;
class JwtToken
{
public function handle(Request $request, Closure $next)
{
$authorization = $request->header('Authorization');
if (empty($authorization)) {
return response()->json(['code'=>40001,'msg'=>'缺少参数token','data'=>''],JSON_UNESCAPED_UNICODE);
}
$token = explode(' ',$authorization)[1];
$res = (new Token())->decodeToken($token);
if (!is_object($res)) {
return response()->json(['code'=>40002,'msg'=>$res,'data'=>''],JSON_UNESCAPED_UNICODE);
}
$request['uid'] = $res->uid;
return $next($request);
}
}
- 加入在Kernel文件 $routeMiddleware 中加入 Token的中间件
'login' => \App\Http\Middleware\JwtToken::class
- 路由使用Token验证
Route::get('/test', [App\Http\Controllers\TestController::class, 'test'])->middleware('login');
- 控制器中获取Token中间件返回参数
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
public function test(Request $request)
{
$uid = $request->uid;
}
}
?>