Rails Can't verify CSRF token authenticity

wudixiaotie · 2014年08月09日 · 最后由 wudixiaotie 回复于 2014年08月11日 · 4035 次阅读

明明在 ajax 请求中加入了 form_authenticity_token,结果有的账户在请求时候还是验证不通过,但是只是偶尔的情况,请问各位大神,有知道的么?还有怎么解决接口的安全性。

其实从日志来看 authenticity_token 传回服务端了 但是和服务端的 token 不匹配 这是什么原因呢?????

我也发帖问过这个问题,无解... https://ruby-china.org/topics/15397

你在 beforeSend 里面设置一下头信息试试,

beforeSend: ->
  xhr.setRequestHeader('X-CSRF-Token', token);

#3 楼 @saiga 找到 bug 在哪了,发现是 form_authenticity_token 在再次请求的时候变了,我也不知道为什么会变,正常应该是只要 session 不过期,这个东西是不变的阿。

终于知道员因是什么了,devise 的问题,登录后只要再次发起请求,is_signed_in?就会返回 false。需要在用到的地方加 authenticate_user! before_action。可是我要判断到底登录没有阿?什么破东西阿。。。

怎么解决的?我也碰到过这个问题,没搞定先放着了

#6 楼 @nowherekai 解决了,妈的历史遗留问题,不是 devise 的问题,我们这边单点登录最开始云端没实现记住我的功能,我们项目自己实现了,结果数据库中有个过期时间的字段,application 里有个 before_filter 会去检查这个字段,如果过期了就取消登录状态,妈的。找来这个项目的前开发人员材给解决,浪费了 2 天。。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号