【发布时间】:2011-06-17 05:59:09
【问题描述】:
有没有一种方法可以让我的应用程序完全保密,并且只让开发人员可以访问?
当随机用户输入 URL 时,它应该是一个空白页面,但是当开发者输入 URL 时,他们应该能够访问应用程序。
【问题讨论】:
-
如果有人从 Google 来到这里寻找 node.js,这里是 link
标签: authentication ruby-on-rails-3 heroku devise
有没有一种方法可以让我的应用程序完全保密,并且只让开发人员可以访问?
当随机用户输入 URL 时,它应该是一个空白页面,但是当开发者输入 URL 时,他们应该能够访问应用程序。
【问题讨论】:
标签: authentication ruby-on-rails-3 heroku devise
我的(也很便宜)解决方案(使用基于类的视图的 Django 应用程序)是在我所有基于类的视图中使用 SuperUserRequiredMixin,如下所示:
class BlogPostDetailView(SuperuserRequiredMixin, DetailView):
template_name = "blogpost-detail.html"
model = BlogPost
添加/删除这个 mixin 是我解决这个问题的方法。
【讨论】:
我自己构建了rack_staging gem 来处理这个用例,它可能对你也有用。
【讨论】:
现在您还可以使用 Heroku add-on,让您指定允许访问应用程序的用户的电子邮件,并使用 Persona(又名 BrowserID)对用户进行身份验证(无需特定于站点的密码)。
【讨论】:
一个非常简单的解决方案是添加一个可以存储在用户机器上的 cookie 中的密钥。这不是一个完美的解决方案,因为有人可以获得密钥,但它可以为您提供基本的保护,防止有人绊倒您的网站。您可以使用http://www.yourdomain.com?access_key=random_string 之类的网址,然后将以下内容添加到您的应用程序控制器中。
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。
【讨论】:
查看 authlogic gem,尤其是单一访问令牌功能。
您可以向未将适当的单一访问令牌作为参数传递的任何人返回 404。
【讨论】:
我的廉价解决方案是实现 before_filter 以在执行每个操作之前请求 HTTP 身份验证。
此解决方案适用于其他身份验证层 - 设计或其他。
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 身份验证,稍后再进行其他身份验证(如果有)。
【讨论】:
您可以使用 HTTP 基本身份验证作为一种简单的方法:
Is there a way to set up simple http authentication for an app on heroku?
不完全是防弹的,但可能就足够了。
您也可以尝试检查heroku_user,如果未设置则拒绝访问:
我在heroku_user 上找不到太多文档,所以我不知道它是否仍然受支持。
【讨论】: