tp5驗證碼
阿新 • • 發佈:2019-01-07
圖形驗證碼
登入時,沒有圖形驗證碼的話,很容被機器人進行模擬登入,對網站安全有很大的威脅。因此,驗證碼是登入功能所必須的。下面,我們就給我們的登入功能,加上驗證碼。
下面功能相關的目錄
- 首先使用Composer安裝think-captcha擴充套件包,通過命令列,進入 D:\www\phper。(您根據實際情況處理)
composer require topthink/think-captcha
若用Composer安裝了驗證碼擴充套件包後,執行顯示如下錯誤:
Fatal error: Class 'Route' not found in E:\www\vendor\topthink\think-captcha\src\helper.php on line 12*
這是由於tp5版本對應的安裝包不一致導致的,5.0版本安裝1.*版本的擴充套件包 5.1版本是用於2.0版本,tp5.0執行如下:
composer require topthink/think-captcha 1.*
若之後還是錯誤的依舊的時候,只能使用以下絕招了:
composer remove topthink/think-captcha
composer remove topthink/think-testing
- 完整安裝之後,我們在 application 下的 config.php 中新增如下配置:
<?php
//配置檔案:驗證碼的配置必須加到 applocation 下面的config 中才可以準確的控制。
return [
'captcha' => [
// 驗證碼字元集合
'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
// 驗證碼字型大小(px)
'fontSize' => 25,
// 是否畫混淆曲線
'useCurve' => true,
// 驗證碼圖片高度
'imageH' => 30,
// 驗證碼圖片寬度
'imageW' => 100,
// 驗證碼位數
'length' => 5,
// 驗證成功後是否重置
'reset' => true
]
];
- 在登入頁面中,index\view\login\index.html 中,密碼下面,加入如下的程式碼:
<!--注意此處的程式碼: onclick="javascript:this.src='{:captcha_src()}?tm='+Math.random();" 段程式碼是用來完成,點選驗證碼圖案,換一個驗證碼的功能。-->
<div class="form-group">
<label>驗證碼</label>
<input type="text" placeholder="請輸入驗證碼" class="form-control" name="captcha">
<img src="{:captcha_src()}" alt="captcha" onclick="javascript:this.src='{:captcha_src()}?tm='+Math.random();" style="cursor: pointer"/>
</div>
若找不到圖片,路徑報錯:'控制器不存在:Captcha’或者圖片不顯示,請如下操作:
1.請檢查路由url_route_on 設定是否開啟了true
2.vendor/topthink/think-captcha/src/captchaController.php、index()方法加入ob_clean()函式
4.然後修改 doLogin 方法,新增驗證碼驗證的處理。首先我們要在 Login.php 的開的頭加入:
use think\captcha;
5.控制器 captcha_check 驗證碼檢測,才能正確的使用。
// 處理登入邏輯
public function doLogin()
{
$param = input('post.');
if(empty($param['user_name'])){
$this->error('使用者名稱不能為空');
}
if(empty($param['user_pwd'])){
$this->error('密碼不能為空');
}
if(empty($param['captcha'])){
$this->error('驗證碼不能為空');
}
// 處理驗證碼
if(!captcha_check($param['captcha'])){
$this->error('驗證碼錯誤');
};
// 驗證使用者名稱
$has = db('users')->where('user_name', $param['user_name'])->find();
if(empty($has)){
$this->error('使用者名稱密碼錯誤');
}
// 驗證密碼
if($has['user_pwd'] != md5($param['user_pwd'])){
$this->error('使用者名稱密碼錯誤');
}
// 記錄使用者登入資訊
cookie('user_id', $has['id'], 3600); // 一個小時有效期
cookie('user_name', $has['user_name'], 3600);
$this->redirect(url('index/index'));
}
- 驗證碼新增成功