【问题标题】:Preventing direct URL access to Rails Controller Methods防止对 Rails 控制器方法的直接 URL 访问
【发布时间】:2011-01-08 05:03:20
【问题描述】:

当我在前端执行 javascript ajax 请求时,我有一个特定的 Rails 控制器方法会返回一些 JSON。

但是,我想阻止用户直接输入显示该方法返回的 JSON 的 url。我还希望仍然能够执行我的 ajax 请求。我怎样才能简单地做到这一点?谢谢!!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    只是一个想法...您可以在 respond_to 块中为 html 请求做一些自定义的事情。

    respond_to do |format|
      format.html { ... } # give them a 404 response?
      format.js { render :json => @obj }
    end
    

    或者你的 html.erb 模板可能只是显示某种拒绝访问的消息。然后你就会有这个:

    respond_to do |format|
      format.html
      format.js { render :json => @obj }
    end
    

    【讨论】:

      【解决方案2】:

      你可以用

      包裹你的动作
          if request.xhr?
             ...
          end
      

      【讨论】:

      • 嘿,你能解释一下你的答案吗?它实际上做了什么
      • 它在后台检查请求头
      • 哦,我可以让 Rails 中的特定 url 只能访问特定的 user_id 吗? (只有这些 user_id 可以查看)否则使用此技术提示一些消息“无权查看此页面或某些内容”
      • 对你的功能使用 cancan 或类似的东西
      • 谢谢你的建议,我现在用的是Devise,和cancan有区别吗?
      【解决方案3】:

      rails3 控制器中的 respond_to 过滤器非常好用。

      YourJsonController < ApplicationController
      
        respond_to :json
      
        def index
          #non-json requests will receive a 406 error
        end
      
      end
      

      【讨论】:

        【解决方案4】:

        在您的routes.rb 中,您可以添加 :via => :post 以便您的 URL 只接受 POST 请求。请参阅http://guides.rubyonrails.org/routing.html 上的“HTTP 动词约束”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-02
          • 1970-01-01
          • 2016-03-04
          相关资源
          最近更新 更多