ThinkPhp 登录界面 中间件

通过使用ThinkPhp中间件来实现用户登录检测。

可以参考官网https://www.kancloud.cn/manual/thinkphp6_0/1037493

  1. 启用session

在app目录下,找到middleware.php。

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

把SessionInit的注释删除。

  1. 添加中间件

在你的项目根目录下

php think make:middleware Check

然后就会多一个文件夹middleware,下面有个Check.php,然后输入下面的代码

    public function handle($request, \Closure $next)
    {
        if (Session::has("has_user")) {
            return $next($request);
        } else {
            return redirect("login");
        }
    }

这边的'login'是在index中定义的。

执行这个中间件的时候,会去判断Session中是不是有'has_user'这个值,有的话表示用户登录过了,就让请求继续走下去,走到你要访问的地方。如果没有,表示用户没有登录,就重定向,去登录页面'login'

  1. 登录页面

先在view/index下面新建一个login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
<form method="post">
    <div>
        <input type="text" name="name" required="required">
    </div>
    <div>
        <input type="password" name="password" required="required">
    </div>
    <input type="submit" name="login" value="Login">
</form>
</body>
</html>

在index.php中加入login

    public function login()
    {

        if (Session::has("has_user")) {
            return redirect("dashboard");
        } else {
            //Check login, when click 'login' submit button, will do this
            if (isset($_REQUEST['login'])) {
                $userName = isset($_REQUEST['name']) ? trim($_REQUEST['name']) : '';
                $password = isset($_REQUEST['password']) ? trim($_REQUEST['password']) : '';

                if ($userName == 'admin' && $password == '123') {
                    Session::set('has_user', $userName);
                    return redirect("dashboard");
                } else {
                    echo "<script>alert('Error')</script>";
                }
            }
            return View::fetch('login');
        }
    }

这边回去检测有没有用户登录过,有就继续访问,没有就去登录界面。

这边的dashboard就是我们加载的页面。

    public function dashboard()
    {
        return View::fetch('index');
    }

  1. 路由设置

Route::rule('login', 'index/login');

Route::group(function () {
    Route::rule('dashboard', 'index/dashboard');
})->middleware(app\middleware\Check::class);

dashboard这个路由表示当你访问的时候,就会先去检查中间件,就是check.php,走handler,然后判断是否有登录。有就继续访问dashboard。没有就执行登录界面,index/login,判断是否登录,登录就走dashboard没有就显示login.html。

当你在登录界面点击提交的时候,页面应该会跳转,但是我们加了中间件,所以又走到了check.php,这样循环。知道登录了,才能访问dashboard。

重点:最好不要用默认的index/index,可能会有重定向的问题,所以我这边用了dashboard。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值