tp5 ajax token令牌的问题

manbudezhu 发布于 2018/01/08 20:20
阅读 833
收藏 0

在用thinkphp5做项目的时候,ajax提交为了安全携带token,但是遇到一个问题,以编辑按钮为例,一个页面只有第一次点击的时候是成功的,第二次点击时就会提示令牌错误.
前端代码:

                <tr>
                    <td></td>
                    <td>1</td>
                    <td>yxg</td>
                    <td>$1</td>
                    <td>
                        <div class="btn-group" role="group" aria-label="...">
                          <button type="button" class="btn btn-info editTag" onclick=editOne('{:url("index/index/delmulti")}','1');>编辑</button>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td>2</td>
                    <td>abc</td>
                    <td>$2</td>
                    <td>
                        <div class="btn-group" role="group" aria-label="...">
                          <button type="button" class="btn btn-info editTag"  onclick=editOne('{:url("index/index/delmulti")}','2');>编辑</button>
                        </div>
                    </td>                
                </tr>
                /*------------------jquery的代码------------*/
                /*ajax 提交封装函数 集成torken */
        function sendAjax(vurl,vtype,vdatatype,vdata){
            // 设置参数默认值
            vtype=vtype||'POST';
            vdatatype=vdatatype||'json';
            $.ajax({
                url: vurl,
                type: vtype,
                dataType: vdatatype,
                data: {'id':vdata,'__token__':'{$Request.token}'},
                // 在ajax 的header头中携带token
            })
            .done(function(data) {
                alert(data.msg);
            })
            .fail(function() {
                alert(data.msg);
            })
            .always(function() {
                console.log("complete");
            });
        }
        /**
         * [editOne ]
         * @param  {[type]} url [description]
         * @param  {[type]} id  [description]
         * @return {[type]}     [description]
         */
        function editOne(url,id){
            sendAjax(url,'POST','json',id);
        }

控制器中的处理代码:

    public function delmulti(){
        $data=$_POST;
        $validate=new Validate([
            'id'=>'require|token',
        ]);
        if(!$validate->check($data)){
            $res['msg']=$validate->getError();
            $res['status']='0';
            echo json_encode($res);
        }else{
            $res['msg']='success';
            $res['status']='1';
            echo json_encode($res);
        }
    }

我的问题出在哪了,应该怎么修改了?

加载中
0
robin-
robin-

提交之后,要更新页面代码里的token吧

robin-
robin-
回复 @manbudezhu : js修改token字段和值呀
manbudezhu
manbudezhu
回复 @robin- : $res['newtoken']= $request->token(); $jres=json_encode($res,JSON_UNESCAPED_UNICODE); echo($jres); 我这里生成了一个新token并返回. js里面代码 该怎么修改才能token重新赋值了,谢谢
robin-
robin-
回复 @manbudezhu : 1、刷新页面;2ajax请求后返回token重新赋值
manbudezhu
manbudezhu
怎么更新了,重新刷新?
0
海诺者
海诺者
提交成功后刷新页面
返回顶部
顶部