Rails的会话问题3

时间:2011-04-12 08:02:18

标签: ruby-on-rails ruby ajax session authlogic

我在Rails 3.0.5中使用Authlogic 2.1.6进行授权,我对AJAX请求有会话cookie问题。

在POST或PUT AJAX调用之后,我收到了401响应和一个新的会话密钥。之后,每次通话都会返回401响应。在POST或PUT呼叫之前,每个GET呼叫都成功。

这不会在测试模式下发生,仅在开发和生产模式下发生。

有人知道如何避免这种情况吗?

编辑:我认为伪造保护真实性密钥存在问题,因为禁用伪造保护后一切正常。

这是一个请求标题,它将产生一个401:

Accept:*/*
Cache-Control:max-age=0
Content-Type:application/json; charset=UTF-8
Origin:http://localhost:3000
Referer:http://localhost:3000/
User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) AppleWebKit/533.19.4    (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
X-Requested-With:XMLHttpRequest

Rails日志条目如下:

Started POST "/users.json" for 127.0.0.1 at Tue Apr 12 10:47:33 +0200 2011
Processing by UsersController#create as JSON
Parameters: {"user"=>{"password_confirmation"=>"[FILTERED]", "group_id"=>2, "lastname"=>"test1", "prename"=>"test1", "password"=>"[FILTERED]", "login"=>"test1"}}
Rendered text template (0.0ms)
Completed 401 Unauthorized in 19ms (Views: 0.9ms | ActiveRecord: 3.0ms)

EDIT2:

下一个奇怪的事情:我发送一个BASIC AUTH Header而不是一个带有会话ID的cookie,我没有得到401,非常奇怪

1 个答案:

答案 0 :(得分:3)

“伪造保护真实性”的基本错误是忘记添加csrf_meta_tag

在您的布局中,将其添加到标头标记中。没有它,没有Ajax请求与好的令牌有关。

如果不是Ajax,请使用simple_form帮助程序在表单中生成令牌