有没有一种方法可以完全保持我的应用程序私有,并只允许开发人员访问?
当随机用户输入URL时,页面应该像一个空白页面,但是当开发人员输入URL时,他们应该能够访问应用程序。
有没有一种方法可以完全保持我的应用程序私有,并只允许开发人员访问?
当随机用户输入URL时,页面应该像一个空白页面,但是当开发人员输入URL时,他们应该能够访问应用程序。
我采用的简单方法是在每个操作执行之前实现一个before_filter,要求进行HTTP身份验证。
这种解决方案可以与其他身份验证层(如Devise或其他)很好地配合使用。
USERS = { "user" => "secret" }
before_filter :authenticate
def authenticate
authenticate_or_request_with_http_digest("Application") do |name|
USERS[name]
end
end
每当其他同级节点访问 yourdomain.heroku.com 时,他们需要进行 HTTP 身份验证,如果设置了其他身份验证,则还需要进行其他身份验证。
一个非常简单的解决方案是添加一个可以存储在用户计算机上的cookie键。虽然这不是完美的解决方案,因为有人可能会获取该密钥,但它可以基本保护您的网站免受不明身份者的访问。您可以使用类似于http://www.yourdomain.com?access_key=random_string 的URL,然后将以下内容添加到您的应用程序控制器中。
class ApplicationController < ActionController::Base
before_filter :check_redirect_key
def check_redirect_key
if request[:access_key] != 'random_string' && cookies[:access_key] != 'random_string'
redirect_to "/404.html"
elsif request[:access_key] == 'random_string'
cookies.permanent[:access_key] = 'random_string'
end
end
end
这段代码将检查用户机器上的url或cookie中是否存在访问密钥,如果在任一位置存在,则允许用户进入。这样一来,一旦他们使用密钥访问了该网站,他们就可以直接访问url。
并不是万无一失但可能足够了。
heroku_user
,如果未设置,则拒绝访问:
我找不到关于
heroku_user
的很多文档,所以我不知道它是否仍然受支持。我的(也很便宜的)解决方案(使用基于类的视图的Django应用程序)是在所有基于类的视图中使用SuperUserRequiredMixin
,像这样:
class BlogPostDetailView(SuperuserRequiredMixin, DetailView):
template_name = "blogpost-detail.html"
model = BlogPost
添加/移除此mixin是我处理此问题的方式。
看看authlogic gem,特别是Single Access Token功能。
如果没有传递适当的单一访问令牌作为参数,您可以向任何人返回404。