为什么我的Rails应用程序认为我是CSRF?

时间:2013-01-09 03:43:57

标签: ruby-on-rails-3 authentication

奇怪的定义: 我的应用程序的会话模型似乎工作正常。存储cookie(user.remember_token = SecureRandom.urlsafe_base64),登录仍然存在。生活很美好。

然而,当用户编辑他们的个人资料并点击提交时,他们就会被注销。

This SO Question让我觉得Rails因为XSRF而结束了会话。

但为什么?

不是在这里发布我的所有代码,而是通过一个链接获取所有代码:https://github.com/chiperific/arcwmi_reports

帮助!

1 个答案:

答案 0 :(得分:1)

您的问题出在User模型中:

before_save :create_remember_token

def create_remember_token
  self.remember_token = SecureRandom.urlsafe_base64
end

每当保存用户时(即,当用户创建或更新时),这将修改remember_token。当用户更新他/她的个人资料时,remember_token会被更改。这会导致登录系统注意到cookie不再与用户匹配 - 并将用户记录下来。

修复方法 - 使用before_create代替before_save