send_file在我的控制器中有身份验证

时间:2014-04-09 08:43:22

标签: ruby-on-rails ruby redmine

我使用ruby 1.9.3,Rails 4.0.4和Redmine 1.4.4

我只有在有权利的情况下才能访问下载PDF。

我的控制器:

class MyController < ApplicationController
  unloadable

  def myFunction
    # code that create a pdf

    File.open(myPdf, 'r') do |file|
      send_file file, :filename => myPdf, :type => "application/pdf", :disposition => "attachment"
      end
    end
  end

end

如果我尝试访问我的PDF而没有记录,我可以下载它,所以我需要检查身份验证。

我尝试了http_basic_authenticate_with :name => "name", :password => "psw",它给了我(undefined method 'http_basic_authenticate_with' for myController:Class

我尝试了before_action :authenticate,它给了我undefined method 'before_action' for myController:Class

我尝试了before_filter :authenticate_user ...它给了我undefined method 'authenticate_user' for #<myController:0x000000064f20d0>

我应该使用before_action,因为它的Rails 4,它为什么会工作?

我该怎么办?

编辑:我不希望所有用户都可以访问pdf,只是我给出的那些...

1 个答案:

答案 0 :(得分:0)

我在我的项目中使用此功能:

class DownloadController < ApplicationController
  before_action :authenticate, only: :billing_pdf

  def billing_pdf
    # i save my pdf file in private folder
    send_file Rails.root.join('private', "billing_pdf"), type: "application/pdf", x_sendfile: true
  end

   def authenticate
    authenticate_or_request_with_http_basic('Administration') do |username, password|
      username == 'admin' && password == 'password'
    end
  end
end

在观点中:

<%= link_to 'Download Billing', download_billing_pdf_path %>
路线中的

namespace :download do
  get 'billing_pdf'
end