zoukankan      html  css  js  c++  java
  • 【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 	hinkValidate($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 。

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

  • 相关阅读:
    事务隔离级别
    OpenSessionInView
    图像平滑处理(滤波)
    [原]Nginx+Lua服务端合并静态文件
    检查数据倾斜分布
    SQL Server研究之统计信息—发现过期统计信息并处理具体解释
    GDALWarp设置GDALWarpOptions::dfWarpMemoryLimit过大时处理失败
    Android Studio 2.0 稳定版新特性介绍
    供应商和管理员查看供应商地址簿信息SQL
    Table AdvanceTable针对表内行禁用multipleSelection , singleSelection
  • 原文地址:https://www.cnblogs.com/xuzhengzong/p/9487557.html
Copyright © 2011-2022 走看看