ThinkPHP3.2.3検証コード表示、リフレッシュ、検証

11160 ワード

認証コードの表示
まず、Home/Clontrollerの下に共通コントローラPublicControllerを作成します.
 1 <?php

 2 namespace Home\Controller;

 3 

 4 use Think\Controller;

 5 use Think\Verify;

 6 

 7 class PublicController extends Controller

 8 {

 9 

10     /*       */

11     public function verify()

12     {

13         $config = [

14             'fontSize' => 19, //        

15             'length' => 4, //      

16             'imageH' => 34

17         ];

18         $Verify = new Verify($config);

19         $Verify->entry();

20     }

21 

22     /*       */

23     public function check_verify($code, $id = '')

24     {

25         $verify = new \Think\Verify();

26         $res = $verify->check($code, $id);

27         $this->ajaxReturn($res, 'json');

28     }

29 }
verify         ,config             。          ,    Thinkphp/Library/Think/Verify.class.php  ,      。
check_verify             。  post            ,  $res==true    false    。
index.html
1 <div class="">

2 <label for="j_verify" class="t">   :</label> <input id="j_verify"

3 name="j_verify" type="text" class="form-control x164 in">

4 <img id="verify_img" alt="    " title="    "

5 src="{:U('public/verify',array())}" class="m">

6 </div>

ThinkphpのUメソッドを用いて検証コードを生成するピクチャを形成する.
この認証コードで正常に表示されます.
検証コードの更新をクリック
上に検証コードを生成するリンクから、ドメイン名/public/verifyが検証コードを生成できることがわかります.Thinkphpの認証コード生成メカニズムは,新しい認証コードを生成する必要がある場合には,そのリンクの後に変数値を1つ追加すればよい.
public/verify/変数値を実現する形式URLを考えることができる.
1 $("#verify_img").click(function() {

2    var verifyURL = "public/verify";

3    var time = new Date().getTime();

4    $("#verify_img").attr({

5       "src" : verifyURL + "/" + time

6    });

7 });

JSを利用して現在のタイムスタンプを取得してURLに追加すればよい.
これにより,検証コードのクリックリフレッシュ機能を実現できる.具体的な表現形式は、自分で勝手にしますね.
非同期検証コード
皆さんはきっといくつかのウェブサイトで見たことがあります.私たちが検証コードを入力するとき、入力中にテキストボックスの後ろにエラーが表示され、私たちが入力したときに検証コードの正しい形式を提示するまで.次のコードが実装されます.
 1 $("#j_verify").keyup(function() {

 2     $.post("public/check_verify", {

 3         code : $("#j_verify").val()

 4         }, function(data) {

 5         if (data == true) {

 6             //       

 7         } else {

 8             //       

 9         }

10     });

11 });

onekeyupを利用します.原理はもう言う必要はないでしょう.
これにより、ユーザー名パスワードを提出する前に認証コードの検証を一度行い、フォームの提出後にもう一度検証を行い、ユーザー体験を向上させることができます.
まだ終わっていません:
以上の形式で検証コードの2回の検証を実現すると、最初の非同期検証に成功するに違いありませんが、フォームを提出して検証コードが間違っていることを示します.その理由はThinkphpのVerifyですclass.php上:
以下は、クラスの初期config構成です.
protected $config =    array(

        'seKey'     =>  'ThinkPHP.CN',   //        

        'codeSet'   =>  '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',             //        

        'expire'    =>  1800,            //        (s)

        'useZh'     =>  false,           //         

        'zhSet'     =>  '……      ,   !',              //         

        'useImgBg'  =>  false,           //        

        'fontSize'  =>  25,              //        (px)

        'useCurve'  =>  false,            //        

        'useNoise'  =>  false,            //           

        'imageH'    =>  0,               //        

        'imageW'    =>  0,               //        

        'length'    =>  5,               //      

        'fontttf'   =>  '',              //

        'bg'        =>  array(243, 251, 254),  //     

        'reset'     =>  true,           //          

        );

最後のプロパティresetは、検証に成功した後に検証コードをリセットするかどうかを示していることに注意してください.皆さんご存知のように、私たちが最初の検査に合格した後、実はこの検証コードはすでに失効しました.ただ、私たちが非同期検査を取ったため、ページがリフレッシュされていません.2回目の検査申請の時とシステムが変わっただけです.だから、この2回のチェックのスタイルが好きなら、resetをfalseに設定すればいいと考えてみてください.
Thinkphp 3に基づいて2.3の検証コードの問題は今日ここまでまとめました.実装方法を大まかに説明しただけで、具体的な内容はTP公式マニュアルを参照してください.間違いがあれば、皆さんの指摘を歓迎します.