允许AJAX通过设计(Rails)

时间:2012-11-08 16:52:21

标签: ruby-on-rails ajax ruby-on-rails-3 devise ruby-on-rails-plugins

我刚添加并配置了设计宝石。除了阻止我的表单的自动保存AJAX调用之外,它工作得很好。

在我的控制器顶部,我有:

before_filter :authenticate_user!

我的AJAX呼叫来到同一个控制器:

  def autosave
    #TODO: update relative entry
    #TODO: verify user logged in
    #TODO: verify entry belongs to relative user
    render content_type: 'text/xml', inline: "<result status='ok' />"
  end

当然,我可以改为声明我之前的过滤器:

before_filter :authenticate_user!, except: :autosave

..但这并没有提供任何阻止任何人随时调用此控制器功能的内容。

允许调用此函数的最佳方法是什么?我仍然希望确保只有登录的用户可以进行调用,并且他们正在编辑的给定记录属于他们。

1 个答案:

答案 0 :(得分:1)

不完全确定您要做的是什么,但听起来您只需要为自动保存添加一些逻辑。使用此设置,该功能本身仍将被调用,但除非条件正确,否则它是否完成任何事情都是另一个问题。

def autosave
  #Verify that the user is signed in and he has ownership of entry
  if !current_user.nil? && entry.user == current_user
    render content_type: 'text/xml', inline: "<result status='ok' />"
  else
    #do nothing nothing or redirect with error here
  end  
end

由于您正在制作AJAX帖子,因此必须为您的ajax调用提供一些额外信息作为安全对策,即CSRF安全令牌。有关使用安全令牌的示例AJAX请求,请参阅Devise not setting current_user on Ajax post even though correct x-csrf-token is included in request header。另外,请确保在头标记中包含<%= csrf_meta_tag %>

相关问题