【问题标题】:Session Problem with Rails 3Rails 3 的会话问题
【发布时间】:2011-04-12 18:20:39
【问题描述】:

我在 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)

编辑2:

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

【问题讨论】:

  • 您是否在 POST 或 PUT 之后检查您的会话是否发生了变化?我们需要更多信息来帮助您喜欢日志。
  • 添加了日志条目和请求头

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


【解决方案1】:

“防伪真实性”的一个基本错误是忘记添加csrf_meta_tag

在您的布局中将其添加到您的标题标签中。没有它,任何 Ajax 请求都与良好的令牌有关。

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

【讨论】:

  • 我以为我可以通过 ajax 发送 json 并避免这个问题?
  • 不,如果您执行另一个请求而不是 GET 如果您保护伪造被激活,则检查始终进行
  • 那么对于一个“普通”的 json API 来说,这也可以吗?对我来说听起来很糟糕
猜你喜欢
  • 2011-04-11
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 2011-05-12
  • 2011-08-25
  • 2011-07-23
相关资源
最近更新 更多