【tp5】表單驗證之token


1、本場景僅介紹復雜一點的ajax請求帶上token驗證,普通的form提交不講

2、原理僅個人理解,如有偏差 歡迎各路大神指點:框架tp5.0.18

 目前將token放置於 ajax的header頭部,發現在后台驗證時候,一直報錯【驗證令牌不存在】。

 故將token放置於 ajax的data參數中。

 后台每進行一次ajax提交,均需要進行token重新生成、替換,不管成功與否。(強烈建議閱讀token生成源碼:request.php的token()方法)

 

3、jquery代碼:【每次ajax接受到的新token,先賦值給隱藏域變量__token__,然后再從該變量取值】

<script type="text/javascript">
    $(document).on("click",".more",function(){
        var jm_product_code = $(this).attr("data-id");
        var token = $("input[name='__token__']").val();
        $.ajax({
            url:"{:url('admin/DingReport/ajax')}",
            dataType:'JSON',
            type:'POST',
            data:{'jm_product_code':jm_product_code,'__token__':token},
            success: function(data, status, xhr) {
                console.log(data);

                $("input[name='__token__']").val(data.__token__);
    
            }
        })
        
    })
</script>

4、tp5

    public function ajax(){
        if($this->request->isGet()) die;
        
        $rule= [
            'jm_product_code'=>'require',
            '__token__' => 'token',     //在需要表單token的地方加入令牌驗證
        ];
        $message= [
            'jm_product_code.require'=>'商品編碼不能為空!',
        ];
        $validate=new \think\Validate($rule,$message);
        if( true !== $validate->check(input())){
            $data = [
                '__token__'=>request()->token(),
                'code'=>0,
                'info'=>$validate->getError(),
            ];
        }else{
            $data = [
                '__token__'=>request()->token(),
                'code'=>1,
                'info'=>'successfully',
            ];
        }
        
        echo json_encode($data,JSON_UNESCAPED_UNICODE);
    }

 

6、壞處:每次請求(無論驗證成功與否)都會生成新的token,可能與tp5的驗證思想不符合;

     反正我也嘗試了 自動獲取ajax返回頭,xhr.getReposeheader("__token__"),but 每次都null 。

     既然如此,只能手動生成了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM