1.下载composer依赖包
composer require firebase/php-jwt
2.在App文件下新建Server文件夹,新建JwtServer类
<?php
namespace App\Server;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
class JwtServer
{
public static function createToken($userId)
{
$key = "example_key";
$payload = array(
"iss" => "http://example.org",
"aud" => "http://example.com",
"iat" => 1356999524,
"nbf" => 1357000000,
'user_id'=>$userId
);
$jwt = JWT::encode($payload, $key, 'HS256');
return $jwt;
}
//验证
public static function decodeToken($jwt){
$key = "example_key";
$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
if ($decoded){
//$decoded = json_decode(json_encode($decoded),true);
//return $decoded['user_id'];
return $decoded;
}else{
return false;
}
}
}
3.创建中间件
php artisan make:middleware CheckApiLogin
4.在中间件中写入 ,将token放入header中传输
public function handle(Request $request, Closure $next)
{
//将token放入header中传输
//$token=$request->header('token');
$token = Redis::get('token');
if (!$token){
return response()->json(['code'=>500,'msg'=>'token不存在','data'=>[]]);
}
$userId=JwtServer::decodeToken($token);
if ($userId){
//将加密id解密传入下一步
$request->attributes->add(['user_id'=>$userId->user_id]);
}else{
return response()->json(['code'=>500,'msg'=>'token过期','data'=>[]]);
}
return $next($request);
}
5.注册中间件
'checkApiLogin' => \App\Http\Middleware\CheckApiLogin::class
6.在路由中使用中间件
Route::group(['middleware'=>'checkApiLogin'],function (){
});
//生成token
Route::get('createtoken',[Token::class,'createtoken']);
//获取token中的userId
Route::get('decodeToken',[Token::class,'decodeToken']);
Route::group(['middleware'=>'checkApiLogin'],function (){
Route::get('Token',[Token::class,'Token']);
});
7.进行检测
//生成token
public function createtoken(){
$userId = request()->get('userId');
$token = JwtServer::createToken($userId);
Redis::setex('token',120,$token);
dd($token);
}
//获取id
public function decodeToken()
{
$token = Redis::get('token');
$userId = JwtServer::decodeToken($token);
$userId = json_decode(json_encode($userId),true);
dd($userId['user_id']);
}
public function Token(){
dd('我口袋只剩玫瑰一片,此行山高又路远。');
}