有没有办法上传应用,但只有我可以访问它?或者也许是通过一组特定的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
但是,上面的代码仍然呈现主要布局文件(app / views / layouts / application.html.erb),它暴露了徽标和页脚。对于未经授权的访问,我们希望显示一个页面,上面写着“Ooops,我们仍在进行一些测试,很快就会公开!”。没有网站的标志,没有任何东西。只是一条简单的信息。
我们使用devise作为我们的身份验证gem。我们不想仅仅为了限制私有beta测试的访问而添加身份验证功能。我们希望通过IP来实现。
这样的事情可能吗?也许上面的代码只需要工作?或者是否有一颗我们只能用于此要求的宝石?
答案 0 :(得分:1)
如果您在Apache或Nginx上进行部署,这应该很容易在相关的站点配置文件中进行配置。在这种情况下,不需要在应用程序本身。
我不完全确定您现有代码的问题。您是说过滤器似乎被忽略,或者文件在布局中呈现?如果是后者,则将:layout => false
指定为渲染选项应该注意这一点。
答案 1 :(得分:0)
我建议使用一些Rack中间件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
未经测试
答案 2 :(得分: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中放置一个简单的错误消息或其他什么