Laravel8 使用JWT token验证

  1. 使用Composer安装JWT包
composer require firebase/php-jwt
  1. 生成Token和验证Token方法
<?php
namespace App\Service;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
 
class Token
{
    protected $key;
    public function __construct()
    {
        $this->key = 'AIDJANLG6LASLADGASD5L6K6H9SF8AG85G9S13G3GHG7613GH6G';
    }
    
    /*生成token*/
    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();
        }
    }
}
  1. 创建Token中间件进行验证
<?php
namespace App\Http\Middleware;
use App\Service\Token;
use Closure;
use Illuminate\Http\Request;
 
class JwtToken
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        // $token = $request->header('token'); //根据自己需求自定义
        $authorization = $request->header('Authorization'); //token
        if (empty($authorization)) {
            return response()->json(['code'=>40001,'msg'=>'缺少参数token','data'=>''],JSON_UNESCAPED_UNICODE);
        }
        
        $token = explode(' ',$authorization)[1]; //Authorization:Bearer <token>
        $res = (new Token())->decodeToken($token);
        if (!is_object($res)) {
            return response()->json(['code'=>40002,'msg'=>$res,'data'=>''],JSON_UNESCAPED_UNICODE);
        }
        
        // $request['uid'] = $res; //返回token中全部参数
        $request['uid'] = $res->uid; //返回token中指定参数
        
        return $next($request);
    }
}
  1. 加入在Kernel文件 $routeMiddleware 中加入 Token的中间件
'login' => \App\Http\Middleware\JwtToken::class
  1. 路由使用Token验证
Route::get('/test', [App\Http\Controllers\TestController::class, 'test'])->middleware('login');
  1. 控制器中获取Token中间件返回参数
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class TestController extends Controller
{
	public function test(Request $request)
    {
        $uid = $request->uid;
    }
}
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值