开启全局中间件,判断用户是否登陆。只有登陆的时候不使用该中间件验证。如何解决

框架开启全局中间件,用以判断用户是否登陆.
如果用户没有登陆,跳转至登陆的路由。如果用户登陆,则通过判断用户会员到期时间,判断会员时间是否到期,如果到期则修改用户状态。

当开启了全局中间件时,登陆路由也无法使用。有什么方法可以除登陆路由外,其他路由正常走全局中间件的验证呢?

当前代码及遇到的问题

check中间件

 <?php
declare (strict_types = 1);

namespace app\middleware;

class check
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        //
        // 判断用户是否到期,如果该用户到期,则修改用户会员信息。返回用户不是会员的信息
        // if ($request->param('username')) {
            // return redirect('index/think');
        // }
        // 获取用户session  获取当前时间
        $username = session('username');
        if (empty($username)) {
            return redirect('check/check');
        }


        // $now = date('Y-m-d h:i:s', time());
        // return $next($request);
    }
}

定义全局中间件

<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    \think\middleware\SessionInit::class,
    //开启全局中间件
    \app\middleware\check::class,
];

全局中间件判断用户是否登陆,只有登陆的时候不使用这个中间件验证。

算命的码农。
最佳答案

判断当前请求的 path,是否在指定的忽略路径数组中。 具体获取方法,根据 Laravel 语法而定(好久没用忘记了)

<?php
declare (strict_types=1);

namespace app\middleware;

class check
{
    const IGNORE = [
        '/xxxx/xxx',
    ];

    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        if (in_array($request->path, self::IGNORE)) {
            // 如果在忽略path中,则跳过
            return $next($request);
        }
        //
        // 判断用户是否到期,如果该用户到期,则修改用户会员信息。返回用户不是会员的信息
        // if ($request->param('username')) {
        // return redirect('index/think');
        // }
        // 获取用户session  获取当前时间
        $username = session('username');
        if (empty($username)) {
            return redirect('check/check');
        }


        // $now = date('Y-m-d h:i:s', time());
        // return $next($request);
    }
}
3年前 评论
merle_Eul的神圣法杖 (楼主) 3年前
Colorado 3年前
merle_Eul的神圣法杖 (楼主) 3年前
Colorado 3年前
讨论数量: 1

判断当前请求的 path,是否在指定的忽略路径数组中。 具体获取方法,根据 Laravel 语法而定(好久没用忘记了)

<?php
declare (strict_types=1);

namespace app\middleware;

class check
{
    const IGNORE = [
        '/xxxx/xxx',
    ];

    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        if (in_array($request->path, self::IGNORE)) {
            // 如果在忽略path中,则跳过
            return $next($request);
        }
        //
        // 判断用户是否到期,如果该用户到期,则修改用户会员信息。返回用户不是会员的信息
        // if ($request->param('username')) {
        // return redirect('index/think');
        // }
        // 获取用户session  获取当前时间
        $username = session('username');
        if (empty($username)) {
            return redirect('check/check');
        }


        // $now = date('Y-m-d h:i:s', time());
        // return $next($request);
    }
}
3年前 评论
merle_Eul的神圣法杖 (楼主) 3年前
Colorado 3年前
merle_Eul的神圣法杖 (楼主) 3年前
Colorado 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!