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 。

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

  • 相关阅读:
    flex 按钮自定义皮肤
    SQl查询数据库库名,表名、表的列名
    导出到excel文件
    信息安全技术 实验一 JS 实现 Source code CryptoJS
    python学习
    博客园可以直接写可运行的JS,还可以传文件,我爱死你啦 力挺博客园
    Javascript 数的表示与位运算
    交换两个值
    开发Question
    2272012 笔记 开机启动服务
  • 原文地址:https://www.cnblogs.com/xuzhengzong/p/9487557.html
Copyright © 2011-2022 走看看