禁止公共,Rails的直接URL

时间:2016-03-10 02:47:25

标签: ruby-on-rails ruby-on-rails-4

我正在制作Rails应用程序。 当用户发布内容时,它会在公用文件夹中创建一个文件夹。只有管​​理员可以将图像放入其中。用户可以在他制作的文件夹中观看。

但是如果其他用户像这样http://railsapp.com/folder/test/test.jpg/放置了直接网址,则会显示。

我想禁止在有人直接访问时显示。我该怎么办?

我是否在Rails.root中创建文件夹?但我不知道如何展示它。请给我一个建议。

1 个答案:

答案 0 :(得分:0)

此处的解决方案非常明显 - 如果您不希望公开,请不要上传到/public。并且您不想更改公共目录的访问规则,因为这会弄乱您的所有资产和rails回退错误页面。

常见的选择是使用/storage但是您需要使用Rails来提供资产。

这将涉及为上传的文件创建模型和控制器,并使用send_file为其提供服务。

class AttachmentController
  def show
    @attachment = Attachment.find(params[:id])
    # @todo authorize access.
    send_file @attachment.path, type: @attachment.mime, disposition: 'inline'
  end
end

如果您不希望仅将铁路线程与服务图像捆绑在一起的情况下的解决方法是在“私有”资产的路径名中使用不可猜测的哈希值。请注意,它们并非真正私密 - 更难找到。