2011-01-27 50 views
1

有没有办法上传一个应用程序,但只有我可以访问?或者可能由一组特定的IP组成?如何限制公共访问导轨应用程序

原因是,我们希望在向公众开放应用程序之前运行一些私人在线测试。到目前为止,我想出了下面的代码:

class ApplicationController < ActionController::Base 
    before_filter :restrict_access 

    def restrict_access 
    whitelist = ['127.0.0.123', '10.0.1.7', '10.0.1.8'].freeze 

    unless(whitelist.include? request.env['REMOTE_ADDR']) 
     render :file => "#{Rails.public_path}/500.html", :status => :unauthorized 
     return 
    end 
    end 
end 

然而,上面的代码仍然呈现主要布局文件(应用程序/视图/布局/ application.html.erb)暴露的标志和页脚。对于未经授权的访问,我们希望显示一个页面,上面写着“Ooops,我们仍在做一些测试,并且很快就会公布!”。没有该网站的标志,没有任何东西。只是一个简单的消息。

我们使用devise作为我们的认证宝石。我们不想仅添加身份验证功能来限制访问进行专用测试。我们希望通过IP来实现。

这样的事情可能吗?也许上面的代码需要处理?或者是否有我们完全可以用于此要求的宝石?

回答

1

如果您在Apache或Nginx上部署,应该很容易在相关的站点配置文件中进行配置。在这种情况下,不需要在应用程序中。

我不完全确定问题与您现有的代码是什么。你是说过滤器似乎被忽略,或者文件在布局中呈现?如果是后者,则指定:layout => false作为渲染选项应该注意这一点。

+0

一个普通的错误味精或任何我的虚拟主机是Heroku的。不太确定我是否可以访问服务器配置文件。但是,:layout => false做到了。感谢那! – 2011-01-27 17:50:54

0

我会建议使用一些Rack middelware a.e. rack-rewrite

require 'rack-rewrite' 

#in your environment 
    config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do 
     r301 %r{.*}, "YOUR REDIRECTPAGE$&" ,:if => Proc.new {|rack_env| 
       #puts here your conditions basing on rack_env 
     } 
    end 

未测试

0
class ApplicationController < ActionController::Base 
before_filter :check, :except=>:unauth 

def unauth 
    render(:layout=>false) 
end 

private 
    def check 
    whitelist = ['127.0.0.123', '10.0.1.7', '10.0.1.8'].freeze 
    if !(whitelist.include? request.env['REMOTE_ADDR']) 
     redirect_to('/unauth') 
     return 
    end 
    end 
end 

未经测试,但应该这样做,现在你可以放在unauth.rhtml