周大胖子 发表于 2021-8-16 11:43:31

一个中间件,拿来验证tymon/jwt-auth

大环境 laravel 5.8   tymon/jwt-auth 1.0
<?php



namespace App\Http\Middleware;



use Closure;

use Illuminate\Support\Facades\Auth;

use Tymon\JWTAuth\Facades\JWTAuth;

use Tymon\JWTAuth\Exceptions\TokenExpiredException;

use Tymon\JWTAuth\Exceptions\JWTException;

class MyJwt

{

    /**

   *

   * Handle an incoming request.

   *

   * @param\Illuminate\Http\Request$request

   * @param\Closure$next

   * @return mixed

   */

    public function handle($request, Closure $next)

    {

      $token = $request->header('token');
      $request->headers->set('Accept', 'application/json' );
      $request->headers->set('Authorization', 'Bearer ' .$token);
      $request->headers->set('content-type', 'application/x-www-form-urlencoded');
      
      if($request->getMethod() == "OPTIONS") {
            return Response::make('OK', 200, $headers);
      }

      
      try {
                if(! $user = JWTAuth::parseToken()->authenticate()){
                  return response()->json([
                        'errcode' => 400001,
                        'errmsg' => '无此用户'
                  ], 404);
                }
            
            } catch (TokenExpiredException $e) {
                return response()->json([
                  'errcode' => 400001,
                  'errmsg' => 'token 过期'
                ]);
            } catch (TokenInvalidException $e) {
                return response()->json([
                  'errcode' => 400001,
                  'errmsg' => '无效的token'
                ]);
            } catch (JWTException $e) {
                // return response()->json(['token_absent'], $e->getStatusCode());   // 不存在
                return response()->json([
                  'errcode' => 400001,
                  'errmsg' => 'token不存在'
                ]);
            }
         
         
                  // return response()->json(compact('user')); 这个是结果值,是轻求到的数据,可以放在 $request 中往后继续带
            $headersData = response()->json(compact('user'));

            $request->attributes->add(['userinfo'=>$headersData->original['user'] ]);

            
         return $next($request);


      // 下面采集自另外一个地方,其实也可以正常用

      // try {
      //   if (!$user = JWTAuth::toUser(JWTAuth::getToken())){
      //         return response()->json([
      //             'errcode' => 400004,
      //             'errmsg' => '无此用户'
      //         ], 404);
      //   }

      // } catch (TokenExpiredException $e) {

      //   return response()->json([
      //         'errcode' => 400001,
      //         'errmsg' => 'token 过期'
      //   ]);

      // } catch (TokenInvalidException $e) {

      //   return response()->json([
      //         'errcode' => 400003,
      //         'errmsg' => 'token 失效'
      //   ]);

      // } catch (JWTException $e) {

      //   return response()->json([
      //         'errcode' => 400002,
      //         'errmsg' => 'token 参数错误'
      //   ]);

      // }

      // $headersData = response()->json(compact('user'));

      // $request->attributes->add(['userinfo'=>$headersData->original['user'] ]);

      // return $next($request);



    }



}

页: [1]
查看完整版本: 一个中间件,拿来验证tymon/jwt-auth