thinkPHP6.0入门笔记(十)——后台登录页面设计

利用thinkPHP6.0制作后台登录页面

      • 1.环境配置与要求
      • 2.验证码插件的使用
      • 3.验证后台用户的身份
      • 4.阻止用户直接使用url访问后台

1.环境配置与要求

thinkPHP6.0入门笔记(十)——后台登录页面设计_第1张图片

    之前提到了注解路由,因此希望这一次使用注解路由的形式来构建登录页面。同时为了更好的理解thinkPHP的插件,决定引入验证码插件,具体的配置方法如下:
验证码:composer require topthink/think-captcha
注解路由:composer require topthink/think-annotation
    使用composer下载完成之后,如果在app/config目录下出现了captcha.php和annotation.php文件证明配置成功。

2.验证码插件的使用

    首先,模仿之前创建控制器和用户新增页面的方法,构建一个login控制器,同时在view下新建一个login文件,并在login目录下新建一个index.html文件,将之前写好的用户新增表单复制进去,稍作修改,仅保留用户名和密码输入框,得到结果如下:
thinkPHP6.0入门笔记(十)——后台登录页面设计_第2张图片
接下来,在管理员密码下新增如下代码:

<div class="form-group">
    <label for="captcha" class="col-sm-2 control-label captcha-img">{:captcha_img()}</label>
    <div class="col-sm-10">
        <input type="text" class="form-control" id="captcha" required name="captcha" placeholder="请输入验证码">
    </div>
</div>

利用{:captcha_img()}可以很方便的构建一张验证码图片,得到效果如下:
thinkPHP6.0入门笔记(十)——后台登录页面设计_第3张图片
至于验证码的验证可以使用如下方式:
(1)在验证码输入框中增加name="captcha"属性,便于POST提交表单之后获取用户输入的验证码;
(2)在login控制器下面新增一个方法check,当用户点击登录提交表单之后,将数据提交给check,在check函数里面利用$request->param()获取提交参数,得到上面所说的用户输入的captcha
(3)接下来,利用验证器组件自带的检测函数captcha_check检测验证码是否正确,该函数只有一个参数,内容为待验证的验证码;
使用举例如下:

 $data=$request->param();
 if(captcha_check($data['captcha'])){
            echo '验证码正确';
        }

thinkPHP6.0入门笔记(十)——后台登录页面设计_第4张图片

3.验证后台用户的身份

    对于后台用户身份的验证,验证码的验证可以直接使用上述函数检测,对于用户用户名和用户密码的验证则要相对复杂一些。需要考虑如下几种情况:
(1)用户名相同,密码不同(通常情况下是不会出现的,但也存在部分网站没有限制用户名唯一);
(2)用户名不同,用户密码相同;
    针对上述情况,可以采用如下验证方法:

  $validate=validate::rule([
            'name'=>'unique:auth,name^password'
        ])->check([
            'name' => $data['name'],
            'password' => sha1($data['password'])
        ]);

解释:使用thinkPHP6自带的validate验证控制器,和前面的验证器使用方法差不多,只是没有另设置文件传递提示信息。重点是rule里面的验证规则写法,unique:数据库名称,由于之前设计数据表的时候设置了默认前缀,因此这里就不需要再写前缀名了。
    验证规则的unique的使用方法如下:

unique:table,field,except,pk

其中table参数是限制待验证的字段在该数据表中是唯一的,field字段是用来验证其他字段,如果是多个字段同时验证唯一性,使用“^”来连接,如果是多个字段分开验证在数据表中的唯一性使用“&”来连接,举例如下:

// 多个字段验证唯一验证条件,验证name,status,account这一组值唯一
'name'   => 'unique:user,status^account',
// 多个字段分别验证唯一性
'name'   => 'unique:user,status&account',

    至于其他参数的用法可以参考thinkPHP官网教程,这里不多做说明。这里使用的验证方法属于反向验证,其含义是:借助validate的验证条件来判断,validate的unique表示的是用户名和密码构成的联合体需要在数据库中是唯一的。现在如果用户输入的用户名密码刚好匹配了,反而会由于unique验证而报错。对于其他的用户名、密码只要能通过唯一校验则说明用户名密码至少有一个错误。
    只要用户输入的用户名和密码都通过验证,我们可以跳转到 localhost/index.php/user。

4.阻止用户直接使用url访问后台

    我们知道,对于后台页面,我们可以直接使用 localhost/index.php/user访问。这里就涉及路由中间件的使用了,下面简单来介绍一下路由中间件的使用方式:

Route::resource('user','User')->middleware(function($request,Closure $next){
   if(!session('?admin')){
       return redirect('/index.php/login');
   }
   return $next($request);
});

解释:middleware里面函数的参数是必填项,可以看成一种固定的语法。这里表示的是,如果用户的adminsession没有的haul将会跳转到用户登录页面。
    一般情况下,session的过期时间是30分钟左右,因此我们可以在用户第一次登录的时候,创建一个session键值对,之后用户访问其他页面,只需要检测是否含有这个session键值对,如果有的话就说明用户依然是登录状态,否则用户需要重新登录。相关的session函数有以下几个:

//检测是否含有键名为admin的session信息
session('?admin')
//设置session信息
 session('admin',"凌空暗羽");
//删除session信息
 session('admin',null);

    如果用户需要退出登录,直接删除session信息就行,这样通过session就能灵活监测并操作用户的登录登出信息了。
    plus:这篇博文简洁了些,理论学的差不多了,赶紧溜去实战啦~

thinkPHP6.0入门笔记(十)——后台登录页面设计_第5张图片

你可能感兴趣的:(php,mvc,http)