登录功能一般是指用户输入用户名、密码以及验证码后,后台检测用户身份并放行进入主界面。在本项目的登录功能中,有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中,作为登录状态判断依据,并跳转到主界面。