微信實驗十一、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
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。