5.8.38 路由中使用中间件做token校验,跳转到新路由地址,但原路由中控制器依然向下执行

问题描述:
设置了一个路由群组中,路由群组绑定了校验 token 的中间件,token 失效则回跳转到指定页面
返回了指定页面中内容,但原路由访问页面的程序依然向下执行,感觉像中间件是父进程跳转新页面返回新页面数据,而原来的页面数据则变成了后台执行脚本。

以下是我的部分代码以及结果描述#

路由文件

Route::get('logout', function(){
    return [
    'code' => 0,
    'msg' => '已退出登录',
    ];
});
Route::group(['middleware' => 'sale.login'], function($route){
        $route->get('/api/sale/getInfo', 'Api\SaleController@getInfo');
})

控制器

public function getInfo(){
    Log::info('getInfo');
}

当 token 无效时,返回了 logout 中返回的结果,但是日志文件中也打印了 getInfo。
我现在是想当 token 失效时,该如何避免 getInfo 继续执行。

路过的大神们,有过同样经历的,或看过类似的帖子,麻烦发给我一下,谢谢了。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 4

要具体看下你的中间件怎么写的!

4年前 评论

中间件 sale.login

    public function handle($request, Closure $next, ...$guards)
    {
       //校验token有效性
        if(!checkToken($request)) {
            //判断用户未登录就返回退出登录的信息
            return redirect('/logout');
        }
        //如果已登录则执行正常的请求
        return $next($request);
    }
4年前 评论

你控制器写没写构造方法,如果写了是要先走构造方法的,然后在走中间件

4年前 评论
deory (楼主) 4年前
//校验token有效性
        if(!checkToken($request)) {
            //判断用户未登录就返回退出登录的信息
            return redirect('/logout');
        } else {
           //如果已登录则执行正常的请求
           return $next($request);
      }

"这样也不行吗"

4年前 评论
deory (楼主) 4年前
wanzi (作者) 4年前