1. 程式人生 > >微信實驗十一、ThinkPHP5.0登入、驗證及原始碼下載

微信實驗十一、ThinkPHP5.0登入、驗證及原始碼下載

(>>>>在公眾號中輸入文章最後彩蛋即可獲取原始碼)

技術QQ群名稱:豆豆諮詢,群號:625686304

微信公眾號名稱:豆豆諮詢,微信公眾號:douAsk

初建日期:2017.04.23

一、實驗目的 

1、掌握ThinkPHP5.0登入與驗證原理,實現使用者登入功能。

二、實驗內容

1、建立ThinkPHP5.0使用者登入與驗證功能頁面。

三、實驗步驟及過程 

ThinkPHP登入是應用系統網站的一個基本功能。我們借鑑nango程式碼,增加了一些使用者輸入驗證功能,實現了使用者登入功能。

1、建立登入介面


實驗流程如下所示:

1)安裝程式:http://127.0.0.1/noneCms/public/install

安裝資料庫程式,可以參看實驗十的內容,不同的是可以設定資料庫的使用者名稱和密碼,最好採用phpStudy環境下安裝資料庫;

2)建立weixin模組:在根目錄下使用命令php think build –module weixin,建立weixin模組;

3)建立控制類及方法:建立Login控制類及index方法,實現登入控制類。

4)建立view層的顯示頁面以及驗證類。

2、關鍵程式碼解析

Login.php為控制模組檔案,即通過http://127.0.0.1/noneCms/index.php/weixin/login/index訪問網站的使用者登入頁面,呼叫weixin模組的login控制器的index方法。該檔案還可以採用不同的方法實現引導使用者登入頁面,我們採用weixin模組,以login控制器的index方法引導登入頁面顯示,以login控制類的login方法完成登入功能。

1)Login.php檔案

Login.php是login控制器檔案,其中index方法主要完成登入頁面顯示,login完成使用者密碼驗證及輸入的驗證,程式碼如下:

<?php
namespace app\weixin\controller;
use think\Controller;
use think\Db;
use think\Request;
use think\Session;
class Login extends Controller
{
    //登入介面
    public function index(){
        //驗證是否登入成功
        if (Session::has('userinfo')) {
            $this->redirect('index/index');
        }
        return $this->fetch();//按照系統的預設規則定位模板檔案到:[模板檔案目錄]/當前控制器名(小寫+下劃線)/當前操作名(小寫).html,即view/login_index.html
    }
    //登入操作
    public function login(){
        if(!request()->isPost()){
            $this->redirect('index/index');
        }
        $name = input('post.username');
        $passwd = input('post.password');
        $captcha = input('post.captcha');
        $data1 = [
                 'username'=>$name,
                 'password'=>$passwd
        ];
        $validate = \think\Loader::validate('AdminLogin');
        if(!$validate->check($data1)){//驗證資料
         exit(json_encode(array('status' => 0, 'msg' => $validate->getError())));
        }
        if (!$name || !$passwd) {
            exit(json_encode(array('status' => 0, 'msg' => '使用者名稱和密碼不能為空')));
        }
        if(!captcha_check($captcha)){
            exit(json_encode(array('status' => 0, 'msg' => '請輸入正確的驗證碼')));
        }
        $info = Db::name('admin')->where('username',$name)->find();
        $md5_passwd = md5(md5(trim($passwd)).$info['encrypt']);
        if (!$info || $md5_passwd != $info['password']) {
            exit(json_encode(array('status' => 0, 'msg' => '使用者名稱或密碼錯誤,請重新輸入')));
        }
        if ($info['islock'] == 1) {
            exit(json_encode(array('status' => 0, 'msg' => '您的賬戶已被鎖定,請聯絡超級管理員')));
        }
        //寫入日誌
        $data['ip'] = $login['loginip'] = request()->ip();
        $data['userid'] = $info['id'];
        $data['datetime'] = $login['logintime'] = time();
        Db::name('log')->insert($data);
        Db::name('admin')->where('id',$info['id'])->update($login);
        //登入成功,存入session
        Session::set('userinfo',['name' => $name,'id' => $info['id'],'login_time' => time()]);
        exit(json_encode(array('status' => 1, 'msg' => '登入成功', 'url' => url('index/index'))));
    }
}

2)validate/AdminLogin.php檔案

該檔案輔助Login控制器的login方法驗證使用者登入資料,在Login.php檔案中採用程式碼$validate = \think\Loader::validate('AdminLogin');呼叫AdminLogin驗證器驗證。

AdminLogin.php檔案如下所示。

<?php
namespace app\weixin\validate;
use think\Validate;
class AdminLogin extends Validate {
       protected $rule =   [
                        'username'  => 'require|max:25|min:4',
                        'email' => 'email',
                        'password' => 'require|max:25|min:6',
                        'repassword'=>'repassword'
       ];
       protected $message  =   [
                        'username.require' => '使用者名稱必須',
                        'username.max'     => '使用者名稱最多不能超過25個字元',
                        'username.min'     => '使用者名稱最少4個字元',
                        'password.require'   => '密碼必須',
                        'password.min'  => '密碼長度至少六位',
                        'email'        => '郵箱格式錯誤',
                        //'repassword.require' => '確認密碼必須',
                        'repassword.confirm' => '兩次密碼必須一致'
       ];
}

四、技術服務


1、如果有疑問或者需要幫助,請加入QQ群(群名稱:豆豆諮詢,群號:625686304);或者公眾號douAsk,公眾號名稱為“豆豆諮詢”。掃描以下二維碼,關注“豆豆諮詢”

 

技術QQ群名稱:豆豆諮詢,群號:625686304

微信公眾號名稱:豆豆諮詢,微信公眾號:douAsk

彩蛋號:1208