1. 程式人生 > >tp5驗證碼

tp5驗證碼

圖形驗證碼

登入時,沒有圖形驗證碼的話,很容被機器人進行模擬登入,對網站安全有很大的威脅。因此,驗證碼是登入功能所必須的。下面,我們就給我們的登入功能,加上驗證碼。

下面功能相關的目錄
在這裡插入圖片描述

  1. 首先使用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

  1. 完整安裝之後,我們在 application 下的 config.php 中新增如下配置:
<?php
//配置檔案:驗證碼的配置必須加到 applocation 下面的config 中才可以準確的控制。
return [
	
	'captcha'  => [
			// 驗證碼字元集合
			'codeSet'  => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
			// 驗證碼字型大小(px)
			'fontSize' => 25,
			// 是否畫混淆曲線
			'useCurve'
=> true, // 驗證碼圖片高度 'imageH' => 30, // 驗證碼圖片寬度 'imageW' => 100, // 驗證碼位數 'length' => 5, // 驗證成功後是否重置 'reset' => true ] ];
  1. 在登入頁面中,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'));
   }

  1. 驗證碼新增成功
    在這裡插入圖片描述