post_via_redirect中的InvalidAuthenticityToken

时间:2014-12-04 11:34:35

标签: security ruby-on-rails-3.2 csrf

我们正在将Rails 3.0.0迁移到Rails 3.2.21。突然间,我们开始在用户登录的集成测试中遇到InvalidAuthenticityToken(见下文)。

post_via_redirect login_url, {:login => { :login => @user.login, :password => @user.password }

我们有自定义身份验证逻辑,而且它的工作时间更早。

我们还尝试在上面的调用中手动传递authenticity_token,但它没有帮助。我们尝试调试并发现当我们通过authenticity_token时(使用SecureRandom.base64(32)),_csrf_token值与我们在authenticity_token中传递的值不匹配。

我们是否遗漏了任何配置?

1 个答案:

答案 0 :(得分:1)

为authenticity_token定义一个方法,并在出现此错误的任何地方使用。

def set_form_authenticity_token
    session[:_csrf_token] ||= SecureRandom.base64(32)
end

实施例。 params.merge(authenticity_token: set_form_authenticity_token)