2010-01-26 151 views
0

在我的Ruby on Rails应用程序中,我试图使用apache .htaccess功能来保护公用文件夹的一部分,以防止文件从非验证用户访问。 所以我已经放置一个.htpasswd文件来保护这个文件夹,并相应地设置Apache和这项工作...提示我的登录名/密码来访问文件。RoR:在会话中存储HTTP_AUTHORIZATION以访问受保护的.htaccess文件夹

我使用宁静的身份验证插件来认证用户到他们的凭证。我的想法是要做到:

  1. authentify用户
  2. 如果用户鉴别的,设置 HTTP_AUTHORIZATION变量和 储存它,这样我可以访问 保护的文件夹中的文件,而不 浏览器提示我要 登录/密码

我做了什么,在应用程序控制器:

helper_method :set_http_auth 

def set_http_auth 
    request.env['HTTP_AUTHORIZATION'] = AutionController::HttpAuthentication::Basic.encode_credentials("myLogin","myPassword") 
end 

然后调用控制器中的before_filter来设置值。

它看起来像是在做这项工作,我得到HTTP_AUTHORIZATION设置到我的request.env数组中,但不幸的是,如果我尝试从受保护的文件夹(如图像)获取文件,浏览器仍会提示我输入login/passwd。

如果有人有一个想法,我都耳朵:)谢谢!

回答

0

我发现了一个可能适用的解决方案:Here但它需要对我的应用程序进行重大更改。

因此,我选择使用apache cookie检测来保护文件夹,然后检查cookie是否在尝试访问文件时存在(cookie在用户身份验证时设置)。

电子邮件我是你想要的细节...

1

各地的各种解决方案来看,最好的似乎使用mod_xsendfile:
命令和apt-get安装mod_xsendfile

before_filter :login_required 

def download 
    send_file '/home/railsway/downloads/huge.zip', :type=>"application/zip", :x_sendfile=>true 
end 

这不会占用你的rails进程(apache在接收到x-sendfile头文件后将文件本身传给公共目录)。 所以这是保护你的文件的最有效和最简单的方法。随意使用您自己的身份验证。 Nginx和lighthttpd有类似的解决方案...

相关问题