我在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,非常奇怪
答案 0 :(得分:3)
“伪造保护真实性”的基本错误是忘记添加csrf_meta_tag
在您的布局中,将其添加到标头标记中。没有它,没有Ajax请求与好的令牌有关。
如果不是Ajax,请使用simple_form帮助程序在表单中生成令牌