如何在rails中加密url

时间:2015-11-20 06:39:19

标签: ruby-on-rails

例如,我在项目中有网址:http://localhost:3000/images/20/thumb/300x300。其中300x300 - 动态参数在url中为作物宽度和图像高度。我如何加密这个网址?可以通过为http标头添加令牌吗?我需要这个以保护服务器不生成具有不同宽度和高度的图像(100x100,150x200,300x200 ...)的不同网址。请显示代码示例。

2 个答案:

答案 0 :(得分:0)

您可以在路线上使用此功能:

get 'images/:id/thumb/:size', size: /^[0-9]+x[0-9]+$/

在您的控制器上,您可以访问图像的ID和大小:

def show
    @image= Image.find( params[:id] )
    width, height=params[:size].split("x").map{|s| s.to_i}
    # ...
end

如果您接受的图像固定大小很少,则可以使用以下约束:

Rails.application.routes.draw do
 get 'images/:id/thumb/:size', size: /^[0-9]+x[0-9]+$/,
    constraints: ImageSizeConstraint.new
end

class ImageSizeConstraint
  def matches?(request)
    params = request.path_parameters

    if %w(100x100 150x200 300x200).include? params[:size]
        return true
    else
        return false
    end
  end
end

答案 1 :(得分:0)

根据您的问题,我了解您希望服务器仅呈现一个可接受的维度。因此,加密URL,您只需在控制器中过滤它

...
ALLOW_THUMB_SIZES = %w( 100x100 150x200 300x200 )
...
def generate_image
  thumb_size = params[:thumb_size]
  if ALLOW_THUMB_SIZES.include? thumb_size
    # do resize image to thumb_size here
  else
    # resize to some default size e.g. 300x300
    # or throw exception...
  end
end
...