直接访问未经身份验证的pdf文件时设计身份验证

scu*_*mah 3 ruby-on-rails devise

尝试查看.pdf文件(使用PDFKit生成)未经身份验证时,我遇到了问题,只是直接从给定的网址开始host/.../profile.pdf.我按预期要求输入图像中显示的凭据(不在users/sign_in路径中):

要求认证

我输入正确的凭据,框上下移动并再次请求凭据.看起来好像用户或密码错了,但事实并非如此.控制器的相关代码在这里:

class Entrepreneur::ProfilesController < ApplicationController
  before_filter :authenticate_user!

  def show
    respond_to do |format|
      format.pdf do
        html = render_to_string(:layout => false , :action => "show.html.haml")
        kit = PDFKit.new(html)
        send_data(kit.to_pdf, :filename => "name.pdf", :type => 'application/pdf')
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

没有什么花哨的,你可以看到.我试图从filter(before_filter :authenticate_user!, :except => [:show])中删除show动作并自己编写一个自定义过滤器来将未经身份验证的用户重定向到new_session_path,但这样做我不知道如何在注册后将用户重定向到pdf show.

简而言之,设计在访问pdf节目时询问我的凭据并且不接受它们.如何让用户访问sign_in页面并在签名后重定向回到pdf?

我正在使用Rails 3.0.7,Ruby 1.8.7和Devise 1.1.5.

谢谢!

Chr*_*art 10

首先,确保它实际上是Rails服务于PDF而不是前面的Web服务器.(根据您的配置,可能是请求永远不会到达Rails.)

假设它是Rails服务文件,那么你应该检查你的devise.rb配置文件.您可能需要制作:pdf一种导航格式,允许Devise向您的sign_in页面发出302重定向:

config.navigational_formats = [:html, :pdf] # you may have additional formats

此外,如果不存在,您可能需要将PDF添加到mime_types.rb初始化程序中:

Mime::Type.register 'application/pdf', :pdf

  • 谢谢!这解决了我的问题!但是,现在设计将我重定向到/users/sign_in.pdf.有什么方法可以从sign_in路径中删除.pdf吗? (3认同)