### 驗證碼
* 一、安裝驗證碼
* 二、模板中使用
* 三、修改驗證碼配置
* 四、自定義驗證碼
* * 1\. 創建
* 2\. 配置
* 3\. 使用
* 五、驗證
TP6 有內置驗證碼插件,只需簡單安裝和配置即可使用,而且驗證碼的驗證也非常方便,下面開始表演。
# 一、安裝驗證碼
~~~bash
composer require topthink/think-captcha
~~~
# 二、模板中使用
將原來靜態頁面的驗證碼圖片替換為`{:captcha_img()}`,這個會自動生成驗證碼圖片。
~~~html
<div style="margin-left: 10px;">{:captcha_img()}
</div>
~~~
生成的html代碼為:
~~~html
<img src="/captcha.html?0.12285642498823002" alt="captcha" onclick="this.src="/captcha.html?"+Math.random();">
~~~
從生成的代碼可以看出,點擊圖片可以切換圖片。生成的圖片:

> 如果圖片沒有出來,檢查下路徑是否正確,路由是否正確。瀏覽器直接訪問`http://tp6.com/captcha`也會顯示二維碼,如果沒有顯示就考慮路由的正確性。
# 三、修改驗證碼配置
在`config`目錄新建`captcha.php`:
~~~php
<?phpreturn ['length' => 4,'codeSet' => '0123456789','useCurve' => false
];
~~~

具體可配置的項:
| 參數 | 描述 | 默認 |
| :-- | :-- | :-- |
| codeSet | 驗證碼字符集合 | 略 |
| expire | 驗證碼過期時間(s) | 1800 |
| math | 使用算術驗證碼 | false |
| useZh | 使用中文驗證碼 | false |
| zhSet | 中文驗證碼字符串 | 略 |
| useImgBg | 使用背景圖片 | false |
| fontSize | 驗證碼字體大小(px) | 25 |
| useCurve | 是否畫混淆曲線 | true |
| useNoise | 是否添加雜點 | true |
| imageH | 驗證碼圖片高度,設置為0為自動計算 | 0 |
| imageW | 驗證碼圖片寬度,設置為0為自動計算 | 0 |
| length | 驗證碼位數 | 5 |
| fontttf | 驗證碼字體,不設置是隨機獲取 | 空 |
| bg | 背景顏色 | \[243, 251, 254\] |
| reset | 驗證成功后是否重置 | true |
# 四、自定義驗證碼
## 1\. 創建
除了使用默認的方式`{:captcha_img()}`,還可以通過`think\captcha\facade\Captcha`類自行創建驗證碼。
~~~php
<?phpnamespace app\admin\controller;
use think\captcha\facade\Captcha;class Verify
{public function index(){return Captcha::create();}
}
~~~
通過這個控制器也能正常返回驗證碼:

## 2\. 配置
自定義驗證碼也可以配置,可以在`config/captcha.php`文件里定義一個配置,然后在創建的時候傳入配置key即可:
`captcha.php`:
~~~php
<?phpreturn ['length' => 4,'codeSet' => '0123456789','useCurve' => false,// 配置名稱可以隨意取'my_set' => ['length' => 3,'codeSet' => 'abcdefg']
];
~~~
修改`Verify`控制器:
~~~php
return Captcha::create('my_set');
~~~
秀一下:

## 3\. 使用
~~~html
<img src="{:url('verify/index')}" class="layadmin-user-login-codeimg">
~~~
想要點擊切換驗證碼,可以添加個onclick事件,自行仿照原生的做法。
# 五、驗證
框架的內置驗證功能:
~~~php
$this->validate($data,['captcha|驗證碼'=>'require|captcha'
]);
~~~
如果沒有使用內置驗證功能,則可以調研內置的函數手動驗證
~~~php
if(!captcha_check($captcha)){// 驗證失敗
};
~~~
> 這里需要注意的是`TP6`默認沒有開啟`Session`,需要自行開啟,而這里的驗證碼驗證需要使用到`session`功能,所以修改app目錄下的中間件文件`middleware.php`,將`\think\middleware\SessionInit::class`的注釋放開即可。
- 空白目錄
- 使用thinkphp6搭建后端api接口流程
- tp6 uniapp vue 前后端跨域解決方案
- 操作記錄
- api00
- 你看看有沒有用
- 6666
- Docker安裝LNMP環境的詳細過程(可部署TP項目)
- LNMP部署thinkphp
- 玩客云Armbian 安裝LNMP環境 Docker
- ThinkPHP6項目基操(16.實戰部分 redis+token登錄)
- ThinkPHP6項目基操(11.實戰部分 部署后臺靜態頁面模板及后臺登錄頁面)
- ThinkPHP6項目基操(13.實戰部分 項目中的自定義異常處理總結 錯誤頁面API錯誤)
- ThinkPHP6項目基操(14.實戰部分 中間件處理登錄流程)
- ThinkPHP6項目基操(12.實戰部分 驗證碼)
- ThinkPHP6項目基操(18.實戰部分 表單令牌Token 防CSRF)
- ThinkPHP6項目基操(19.實戰部分 Mysql模型事務操作)
- ThinkPHP6項目基操(20.實戰部分 數據庫操作返回值總結)
- 瀏覽器端判斷當前設備的運行環境
- api
- api異常捕捉
- 寫一個中間件
- 統一的參數返回形式
- ThinkPHP6調用模型的方法
- thinkphp6控制器、驗證器、模型、service,各層寫的內容