如何在销毁用户时防止设计中的自动注销

时间:2012-03-29 15:52:59

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 devise

我有一个应用程序,用户可以销毁连接到同一帐户的其他用户。

我使用Devise进行身份验证,并希望能够允许用户销毁其他用户。我有点工作,但即使我正在删除其他用户,我也在努力防止设法退出。

我创建了自己的registrations_controller:

class RegistrationsController < Devise::RegistrationsController
  def new
    super
  end

  def create
    super
  end

  def edit
    ...
    super
  end

  def update
    ...
  end

  def destroy
    resource.destroy
    set_flash_message :notice, :destroyed
    redirect_to :root
  end

end

破坏我的每个用户的链接如下所示:

<%= link_to "Yes", registration_path(@user), :remote => true, :method => :delete, :class => "button" %>

但是,每次单击此链接时,即使它是我要删除的另一个用户,也会将其记录下来。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并意识到这不是设计问题。将其添加到您的布局:

<%= csrf_meta_tag %>

Rails希望每个响应都有CSRF身份验证代码。 Rails只会忽略一个没有的GET请求,但是如果你没有将它包含在POST / PUT / DELETE请求中,它将默默地终止当前会话,这会导致你退出。

使用form_for帮助程序时,会自动包含CSRF代码。但是,Rails javascript AJAX助手(处理远程链接的助手)会查找CSRF元标记,以便它可以将代码附加到请求中。

答案 1 :(得分:0)

对于有此问题的其他人,我通过这篇文章解决了这个问题。基本上设计不能删除除当前用户之外的任何其他用户。您需要添加销毁操作以将用户销毁到显示当前视图的其他控制器:

Destroying users as an admin in Devise