我使用网站上提供的宝石
为Ember js设置了一个Rails 4应用程序的Gemfile
gem 'ember-rails'
gem 'ember-source', '1.2.0'
entries_controller.js.coffee
Tut1.EntriesController = Ember.ArrayController.extend
addEntry: ->
entry = @store.createRecord(Tut1.Entry,
name: @get('newEntryName')
winner: false
)
entry.save()
我在控制台上收到此错误。
POST http://localhost:3000/entries 422 (OK)
它正确发布,但是rails重新调整了一个“ActionController :: InvalidAuthenticityToken”,这让我感到困惑,因为主机,起源和引用是相同的。
Host:localhost:3000
Origin:http://localhost:3000
Referer:http://localhost:3000/
它仍然是跨域的吗?我如何验证此请求。
答案 0 :(得分:6)
那里有很多关于那个问题的链接
http://blog.waymondo.com/2012-12-18-ember-dot-js-and-rails-authentication-gotchas/
$ ->
token = $('meta[name="csrf-token"]').attr('content')
$.ajaxPrefilter (options, originalOptions, xhr) ->
xhr.setRequestHeader('X-CSRF-Token', token)
答案 1 :(得分:2)
这不是跨域请求,而是应用程序控制器中的代码:
protect_from_forgery with: :exception
正在努力防范CSRF攻击。发布表单时,它期望有效的CSRF令牌。有some more details here。
解决此问题的一种简单方法是使用rails_csrf。它实际上是从您的服务器请求令牌,然后设置适当的头,以便使用正确的CSRF令牌进行请求。