【发布时间】:2010-05-06 07:17:03
【问题描述】:
我正在建立一个 ror 站点,并已被要求对其设置临时访问限制。所需要的只是供测试用户使用的一般访问限制。该站点使用乘客部署在 apache 服务器(在 Mac 上)上。我想知道有什么解决方案?
【问题讨论】:
标签: ruby-on-rails apache2
我正在建立一个 ror 站点,并已被要求对其设置临时访问限制。所需要的只是供测试用户使用的一般访问限制。该站点使用乘客部署在 apache 服务器(在 Mac 上)上。我想知道有什么解决方案?
【问题讨论】:
标签: ruby-on-rails apache2
我昨天用 Rails 本身的一个简单解决方案回答了a similar question;我使用这个解决方案来保护我的开发站点在测试时不被爬取。为了方便起见,我在下面重新发布了。
Rails 有一个内置的帮助器,你可以把它放在你的应用程序控制器中:
protected
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == "admin" && password == "test"
end
end
然后在您要保护的任何控制器上使用 before_filter(或将其粘贴在应用程序控制器中以阻止整个站点):
before_filter :authenticate
此方法适用于 Nginx 和 Apache,这是一个额外的好处。但是,如果您启用了整页缓存,它就不起作用——因为访问者永远不会碰到 Rails 堆栈;它不会启动。
编辑 刚刚注意到您指定了 /admin 路由。我所有的管理控制器都继承自 AdminController。你可以这样设置:
/app/controllers/admin/admin_controller.rb
class Admin::AdminController < ApplicationController
before_filter :authenticate
protected
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == "admin" && password == "test"
end
end
end
然后让您的所有控制器扩展管理控制器,例如:
class Admin::ThingsController < Admin::AdminController
我的路线是这样设置的:
map.namespace :admin do |admin|
admin.resources :things
end
希望对您有所帮助。
【讨论】:
Prefinery 为您提供针对此类场景的开箱即用解决方案http://www.prefinery.com/
【讨论】:
这是我的第一次尝试,使用了良好的旧 htaccess 解决方案,我发现关于 Rails 的信息非常少。 为用户“beta”生成用户/密码文件:
mysite> htpasswd -c .htpasswd beta
mysite> chmod 755 .htpasswd
在rails public dir'public/.htaccess'中创建一个访问配置文件,包含:
AuthName "Enter password"
AuthType Basic
AuthUserFile /Users/myuser/projects/mysite/.htpasswd
require user beta
更改文件权限:
mysite> chmod 755 public/.htaccess
编辑 apache conf 文件(使用 'apachectl -V | grep SERVER_CONFIG_FILE' 找出它的位置)。在 VirtualHost 配置部分,添加以下内容以定义 htaccess 文件中使用的内容:
AllowOverride All
【讨论】: