<%= content_tag_for(:li,post) do %> <%= link_to 'Delete',post,:confirm => 'Are you sure?',:method => :delete,:remote => true %><% end %>
它在index.HTML.erb中调用如下:
<%= render :partial => @posts.reverse %>
destroy.Js.erb如下所示,如果对象被成功销毁则调用它.
$('#<%= dom_ID(@post) %>').CSS('background','red');$('#<%= dom_ID(@post) %>').hIDe();
单击删除按钮后,post对象将被正确删除,destroy.Js.erb也会正确呈现.但不知何故,用户退出了.以下是我的posts_controller.rb的代码:
def destroy logger.error 'in destroy' @post = Job.find(params[:ID]) @post.destroy respond_to do |format| format.HTML { redirect_to(posts_url) } format.xml { head :ok } format.Js end end
任何线索为什么会出现这种行为?
并且,如果我删除:remote =>从删除链接中返回true,然后用户仍然登录.我在会话的destroy方法中有日志语句,在任何一种情况下都不会被调用,但如果’:remote =>为true,那么会话就会被搞砸了.在检查cookie时,我发现cookie没有被销毁但是当调用post上的destroy方法时它会被修改.不知道为什么会发生这种情况.
解决方法 听起来你正在碰撞铁轨安全功能,以防止 Cross Site Request Forgery.添加:remote => true导致请求通过AJAX提交而没有CSRF安全令牌,因此rails会破坏会话,因为它认为它是CSRF攻击.要解决这个问题,您可以选择以下几种方法:>快速而肮脏(且不安全)的解决方案是关闭该请求的安全检查.为此,请将此行添加到控制器的顶部:
skip_before_filter:verify_authenticity_token,:only => [:破坏]@H_404_44@>更安全的解决方案是使用AJAX调用提交CSRF令牌.我认为如果您将远程链接更改为button_to,这将自动发生.阅读更多here.
<%= button_to'删除',发布,:confirm => “你确定吗?”,:method => :delete,:remote => true%>>您还可以使用cookie来存储current_user而不是会话.这对安全性的影响取决于您的应用程序的详细信息.
总结以上是内存溢出为你收集整理的ruby-on-rails – Rails:用户使用:remote => true销毁不相关的对象后注销全部内容,希望文章能够帮你解决ruby-on-rails – Rails:用户使用:remote => true销毁不相关的对象后注销所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)