JWT详解 3 Laravel JWT自定义错误返回

简介: JWT详解 3 Laravel JWT自定义错误返回

原因

因为jwt如果token验证失败,会返回验证失败,但是因为格式没有被通过配置控制,所以在前后端交互上很麻烦

自定义中间件

创建中间件文件

文件的位置在app/Http/Middleware,内容如下

<?php
namespace App\Http\Middleware;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Closure;
use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
class authJWT extends BaseMiddleware
{
    public function handle($request, \Closure $next)
    {
        if (! $token = $this->auth->setRequest($request)->getToken()) {
            $this->expreturn();
        }
        try {
            $user = $this->auth->authenticate($token);
        } catch (JWTException $e) {
            $this->expreturn();
           $this->events->fire('tymon.jwt.valid', $user);
        return $next($request);
    }
    private function expreturn(){
        $response = new Response();
        $response->headers->set('Accept', 'application/json');
        $response->setContent(json_encode([
            'code'=>401,
            'msg'=>'token验证过期',
            'data'=>[],
        ]));
        $response->setStatusCode(401);
        $response->send(); exit();
    }
}

这里可以自定义需要的格式,上面例子仅供参考

替换之前的中间件

app/Http/Kernel.php

//        'auth.jwt' => \Tymon\JWTAuth\Http\Middleware\Authenticate::class,
        'auth.jwt' => authJWT::class

控制器替换

public function __construct()
    {
//        $this->middleware('auth:'.$this->guard);
        $this->middleware(authJWT::class);
        $this->user  = auth($this->guard)->user();
    }

总结

这样就完成了中间件的替换,达到了自定义验证失败格式的目的。

这部分还有优化空间,有时间我会进一步详解。

相关文章
|
Java
SpringBoot 整合JWT实现基于自定义注解的-登录请求验证拦截(保姆级教学,附:源码)2
SpringBoot 整合JWT实现基于自定义注解的-登录请求验证拦截
188 0
|
3月前
|
消息中间件 Serverless Go
Serverless 应用引擎操作报错合集之通过自定义域名配置jwt认证,始终报错:"Code": "JWTTokenIsInvalid",是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
JSON 安全 关系型数据库
SpringCloud Gateway 实现自定义全局过滤器 + JWT权限验证
SpringCloud Gateway 实现自定义全局过滤器 + JWT权限验证
|
缓存 Java
Jwt使用Aop方式自定义权限注解认证
使用Aop前置通知方式, 在控制层上使用指定切面注解, 并赋予注解参数为访问接口所需角色权限代码, 进行身份认证和权限校验
100 0
|
11月前
|
存储 NoSQL Java
SpringBoot自定义实现类似jwt权限验证效果
SpringBoot自定义实现类似jwt权限验证效果
71 0
|
存储 JSON 算法
SpringBoot 整合JWT实现基于自定义注解的-登录请求验证拦截(保姆级教学,附:源码)1
SpringBoot 整合JWT实现基于自定义注解的-登录请求验证拦截
319 0
|
小程序 前端开发 Java
java如何利用JWT和注解,自定义参数的方式优雅实现小程序用户Id管理
在我们的开发项目中,经常需要用到用户ID,比如在小程序商城系统中,我们将商品加入购物车,这时前端就需要发送请求,携带上用户的ID。基本上很多种请求操作都需要携带用户ID,如果每个请求都需要我们往data中添加id的话,那样需要写很多重复代码,并且代码也不美观;所以我们可以利用JWT跟注解的方式来实现;
186 0
|
NoSQL 中间件 PHP
JWT详解 2 Laravel 安装使用JWT
JWT详解 2 Laravel 安装使用JWT
293 0
|
监控 安全 Java
Springboot 整合JWT (token)+mybatis+自定义注解 实现简单的登录拦截模块
Springboot 整合JWT (token)+mybatis+自定义注解 实现简单的登录拦截模块
437 0
Springboot 整合JWT (token)+mybatis+自定义注解 实现简单的登录拦截模块