med*_*zid 39 ruby-on-rails ruby-on-rails-4
我有两种选择形式remote: true
; 一个发送Ajax请求以执行create
操作,另一个发送Ajax请求以执行destroy
操作.
启用JavaScript后所有工作都会被罚款,但如果我禁用JavaScript,那么我点击,我收到此错误:
ActionController::InvalidAuthenticityToken PersonsController#create
Run Code Online (Sandbox Code Playgroud)
为什么会显示此错误,如何解决?
注意:我正在使用Rails 4
当我使用没有选项的普通表单时remote: true
,rails会自动为身份验证令牌插入一个隐藏字段,但是当我remote: true
在表单中使用时,HTML代码中没有这样的字段.看起来当有remote
选项时,Rails会以不同的方式处理身份验证令牌,那么我如何才能在两种情况下都能使用它?
Dan*_*and 117
奇怪的是,这种行为在rails 4中被改变了.http://www.alfajango.com/blog/rails-4-whats-new/
Rails表单现在不会在表单中呈现CSRF字段,除非您明确将其定义为表单的选项:
<%= form_for @some_model, :remote => true, :authenticity_token => true do |f| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
如果关闭Javascript,添加此选项可以优雅地降级为HTML回退.
Abh*_*ram 28
我也遇到了同样的问题.我使用form_tag创建自定义远程表单,但我得到以下错误,
ActionController::InvalidAuthenticityToken
Run Code Online (Sandbox Code Playgroud)
我发现这是因为在轨道4中默认情况下不会添加真实性,所以我在application.rb文件中添加了以下行,
config.action_view.embed_authenticity_token_in_remote_forms = true
Run Code Online (Sandbox Code Playgroud)
在提交远程表单时自动验证toke.这解决了我的问题.希望这对一些人有所帮助.
归档时间: |
|
查看次数: |
29230 次 |
最近记录: |