首页> 实战笔录 >PHP开发笔记 >ThinkPHP ThinkPHP

TP6利用Session实现前置中间件验证登录

作者:小萝卜 2024-04-19 浏览 61

简介TP6利用Session实现前置中间件验证登录

文件位置:

步骤1:app\admin\middleware目录新建中间件文件AdminLogin.php
 

<?php
declare (strict_types = 1);

namespace app\admin\middleware;
use think\facade\Session;
class AdminLogin
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response|\think\response\Json
     */
    public function handle($request, \Closure $next)
    {

        $white_list  = [
            '/awadmin.php/index/index.html',
            '/admin/index/index',
            '/awadmin.php',
            '/awadmin.php/captcha.html',
            '/awadmin.php/index/login',
            '/awadmin.php/index/getcaptcha'
        ]; // 白名单,不用验证登录

        $request_uri = $_SERVER['REQUEST_URI'];
        $pathinfo    = explode('?',$request_uri)[0];
        $pathinfo    = strtolower($pathinfo);
        //var_dump($pathinfo,$white_list);die;
        //var_dump(Session::has('alogin'));die;
        if(!in_array($pathinfo, $white_list)) {
            //验证登录
            if(Session::get("alogin")!=1){
                if($request->isAjax()){
                    return json(['code'=>9001,'msg'=>"登录失效"]);
                }else{
                    exit('<script language="javascript">top.location.href="'.url('admin/Index/index').'"</script>');
                }
            }
        }

        return $next($request);
    }
}

步骤2:在app\middleware.php文件注册中间件

我这里注册的是应用中间件,还有路由中间件、全局中间件、控制器中间件等方式看个人需求来使用

<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    \think\middleware\SessionInit::class,
    //登录验证
    'admin_login'=>\app\admin\middleware\AdminLogin::class, //取别名
];
配置后,后台访问任意页面都会先经过中间件验证了

很赞哦! (0)

文章评论

    高端网站建设