赞
踩
闲来无事,总结这几天遇到的一个问题,以及解决过程。
这几天在做一个考核项目,拿到需求以后,那就敲代码啊。敲完一个修改功能的时候,测试的时候,突然跳出来这样一个提示框。
请求参数中Token不存在, what,什么鬼。
没办法,有问题那就去解决呗。
首先我就查看我自己的代码有没有写错,于是各种debugger;各种设断点调试。
好吧,数据正常传到后台去了。说明我的代码是没问题的。
那怎么办,遇到问题那就百度一下呗。
搜了一下,百度上没有我想的问题结果。
我就不信了,百度找不到。那我就试试科学上网呗。
不好意思,还是没有。
懵bi中
。。。
好吧,郁闷完了,问题还是得解决。
于是,我就想,这是不是框架中自定义的东西呢。
好吧,查一下官方文档。
尼玛,还真是。尴尬。。。
官方文档是这样说的。
原来这个东西是3.5版本以后,为了防止数据篡改,在进行update数据时,会去校验token。
并且提供了一个解决办法,那就是在配置文件中配置sys.security.token.validate=false 即可。
但是这就等于把token验证给关掉了。但官方文档下面又说了不建议关闭该功能。。。毕竟数据安全性还是很重要的。
于是心里十万个草泥马在奔腾。
又说不建议关闭该功能,但只给关闭该功能的解决办法。又没有说遇到此类问题怎么解决。。。
难道就此放弃,那是不存在的。
于是,我就去找这个token到底是何方神圣。我打开浏览器的调试模式,发现从数据可每次查询一条数据,这条数据都会带上这个token,在浏览器调试模式下参数为_token。
那么我就想,既然提示框说的是请求参数中Token不存在,那我就将这个参数获得以后回传到后台去后台验证试试。
于是,问题又来了,怎样去获取这个值呢。
既然每条数据都会带有_token,那就从选中行的数据入手呗。
- function getToken() {
- var choosegrid = $("#grid").data("kendoGrid");
- var selection = choosegrid.selectedDataItems();
- for (var i = 0; i < selection.length; i++) {
- return selection[i]._token;
- }
- }
于是就写了一个方法去获取它,运气真好,还真被我拿到了。既然拿到了,就传到后台参与验证呗。
- var data = viewModel.model.toJSON();
- data._token = token;
先把token加到model里面去,再通过ajax把整个data传到后台。
tenant.set_token(dto.get(i).get_token());
到这里就应该结束,那就再运行试试呗。
好吧,就是这样做,问题解决。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。