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 。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值