laravel8 实现接口鉴权封装使用JWT

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('我口袋只剩玫瑰一片,此行山高又路远。');
    }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值