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

1.camposer 安装JWT类

composer require firebase/php-jwt

2.在App文件下新建Services文件夹,新建JwtServicer类

 

 3.类中写入以下代码

<?php


namespace App\Server;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use phpDocumentor\Reflection\Types\False_;

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){
            return $decoded;
        }else{
            return  false;
        }

    }
}

4.新建中间件

php artisan make:middleware CheckApiLogin

5.在中间件中写入 ,将token放入header中传输

    public function handle(Request $request, Closure $next)
    {
        //将token放入header中传输
        $token=$request->header('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);
    }

6.注册中间件

'checkApiLogin' => \App\Http\Middleware\CheckApiLogin::class

7.在路由中使用中间件

Route::group(['middleware'=>'checkApiLogin'],function (){
    
    
});

8.获取token解密的凭证这里使用的是userId

    public function index(Request $request)
    {
        $userId=$request->get('user_id');
        
    }

Laravel封装JWT(JSON Web Token)有如下几个步骤: 1. 首先,在路由中使用中间件来验证API登录状态。通过调用`Route::group`方法,并传入`middleware`参数和对应的中间件类,可以将需要验证登录状态的路由进行分组。例如: ``` Route::group(['middleware' => 'checkApiLogin'], function () { // 路由代码 }); ``` 2. 在中间件中编写代码,将token放入header中进行传输。在中间件的`handle`方法中,可以通过`$request->header('token')`来获取header中的token,将token存储在Redis中。如果token不存在,可以返回一个错误响应。如果token存在,则将解密后的用户ID传递给下一步处理。例如: ``` public function handle(Request $request, Closure $next) { $token = Redis::get('token'); if (!$token) { return response()->json(['code' => 500, 'msg' => 'token不存在', 'data' => []]); } $userId = JwtServer::decodeToken($token); if ($userId) { $request->attributes->add(['user_id' => $userId->user_id]); } else { return response()->json(['code' => 500, 'msg' => 'token过期', 'data' => []]); } return $next($request); } ``` 3. 实现生成token和解析token的功能。在相关的控制器类中,可以编写生成token和解析token的方法。生成token时,可以从请求参数中获取用户ID,调用`JwtServer::createToken`方法生成token,并将token存储在Redis中。解析token时,可以从Redis中获取token,调用`JwtServer::decodeToken`方法解析token,并获取用户ID。例如: ``` // 生成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('我口袋只剩玫瑰一片,此行山高又路远。'); } ``` 这样,就完成了在Laravel封装JWT的相关步骤。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [laravel8 实现接口鉴权封装使用JWT](https://blog.csdn.net/code_nutter/article/details/125984755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值