【发布时间】:2016-04-22 08:20:18
【问题描述】:
是否可以在使用 ember-simple-auth 设计的同时通过 cookie_store 实现 Rails csrf?
像 one 这样的指南总是停用 Rails.application.config.session_store,据我了解,这不允许 Rails 跟踪导致 Rails 丢失会话的 csrf 令牌。在尝试了许多解决方案后,包括:
-
require jquery_ujs在 Rails 宣言中。 -
Rails.application.config.session_store :disabled。 - https://github.com/abuiles/rails-csrf。
- Changing Ember.js 适配器附加 CSRF。
最终的结果还是差不多的:
如果protect_from_forgery 设置为:exception 而不是:null_session,则无法验证CSRF 令牌真实性,然后是完成的422 无法处理的实体。
交易示例:
部分请求标头:
X-CSRF-Token:1vGIZ6MFV4kdJ0yYGFiDq54DV2RjEIaq57O05PSdNdLaqsXMzEGdQIOeSyAWG1bZ+dg7oI6I2xXaBABSOWQbrQ==
响应者标题
HTTP/1.1 422 Unprocessable Entity
Content-Type: text/plain; charset=utf-8
X-Request-Id: 71e94632-ad98-4b3f-97fb-e274a2ec1c7e
X-Runtime: 0.050747
Content-Length: 74162
The response also attaches the following:
Session dump
_csrf_token: "jFjdzKn/kodNnJM0DXLutMSsemidQxj7U/hrGmsD3DE="
来自我的 csrf 分支 的 rails-csrf 响应(分支已被删除)。
beforeModel() {
return this.csrf.fetchToken();
},
Partial dump of the return statement:
_result: Object
param: "authenticity_token"
token: "1vGIZ6MFV4kdJ0yYGFiDq54DV2RjEIaq57O05PSdNdLaqsXMzEGdQIOeSyAWG1bZ+dg7oI6I2xXaBABSOWQbrQ=="
据我了解,所有这些尝试的解决方案都有一个共同的根源:session_store 已禁用...
【问题讨论】:
标签: ruby-on-rails-4 ember.js csrf-protection ember-cli-rails