讀古今文學網 > 微信公眾平台開發:從零基礎到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中,作為登錄狀態判斷依據,並跳轉到主界面。