映月读书网 > 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 > 25.3.1 身份验证 >

25.3.1 身份验证

登录功能一般是指用户输入用户名、密码以及验证码后,后台检测用户身份并放行进入主界面。在本项目的登录功能中,有3个输入框,分别是用户名、密码、验证码,以及一个登录按钮。页面代码如下。


 1 <p>
 2     <p><p></p></p>
 3     <p>
 4         <ul>
 5         <li><label>用户名:</label><input type="text" 
           name="username" size="16"></li>
 6         <li><label>密码:</label><input type="password"  name=
           "password" size="16"></li>
 7         <li><label>验证码:</label><input name="verifycode" 
            size="4"  maxlength="4" /><img src="
           {:url('checkVerify')}" onclick="javascript:this.src='{:url('checkVerify')}?
           tm='+Math.random;"   title="重设" id=
           "verifyImage"/></li>
 8         <li><label></label><input type="submit"   /></li> 
 9         </ul>
10     </p>
11 </p>
  

上述页面代码的效果如图25-3所示。

图25-3 登录界面

下面定义一个application\admin\validate\AdminValidate验证器类,用于管理员登录时的验证。其代码如下。


 1 namespace app\admin\validate;
 2 use think\Validate;
 3 
 4 class AdminValidate extends Validate
 5 {
 6     protected $rule = [
 7         ['username', 'require', '用户名不能为空'],
 8         ['password', 'require', '密码不能为空'],
 9         ['verifycode', 'require', '验证码不能为空']
10     ];
11 
12 }
  

上述验证器中,要求用户名、密码、验证码都不能为空。

执行登录函数为doLogin,实现代码如下。


 1 public function doLogin{
 2     $username = Request::instance->param('username');
 3     $password = Request::instance->param('password');
 4     $verifycode = Request::instance->param('verifycode');
 5 
 6     // 验证规则验证
 7     $result = $this->validate(compact('username', 'password', "verifycode"), 'Admin-
       Validate');
 8     if(true !== $result){
 9         $this->error($result);
10     }
11 
12     // 检查验证码
13     $verify = new Verify;
14     if (!$verify->check($verifycode)) {
15         $this->error('验证码错误');
16     }
17 
18     // 检查用户名
19     $hasUser = db('admin')->where('username', $username)->find;
20     if(empty($hasUser)){
21         $this->error('用户名或密码错误');
22     }
23 
24     // 检查密码
25     if(md5($password) != $hasUser['password']){
26         $this->error('用户名或密码错误!');
27     }
28     Session::set('username',$username);
29     $this->redirect('index/index');
30 }
  

执行登录时,首先接收用户提交的3个参数,然后调用validate类先进行非空验证,接下来依次检测验证码、用户名、密码是否正确。其中,密码使用MD5算法加密。3个参数都输入正确后,使用Session类将用户名写入session中,作为登录状态判断依据,并跳转到主界面。