如何将Heroku应用程序保密?

时间:2011-01-28 13:15:50

标签: authentication ruby-on-rails-3 heroku devise

有没有办法让我的应用程序完全保密,只让开发人员有权访问?

当随机用户输入网址时,它应该类似于空白页面,但是当开发人员输入网址时,他们应该能够访问该应用。

7 个答案:

答案 0 :(得分:16)

我的廉价解决方案一直在实施一个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身份验证,之后会进行其他身份验证。

答案 1 :(得分:5)

现在您还可以使用Heroku add-on来指定允许访问应用程序的用户的电子邮件,并使用Persona(也称为BrowserID)对用户进行身份验证(不需要站点专用密码)。

答案 2 :(得分:2)

您可以使用HTTP基本身份验证作为一种简单方法:

  

Is there a way to set up simple http authentication for an app on heroku?

不完全是防弹,但可能就足够了。

如果未设置,您还可以尝试检查heroku_user并拒绝访问:

  

http://blog.heroku.com/archives/2008/1/14/heroku_user/

我在heroku_user上找不到太多文档,所以我不知道它是否仍然受支持。

答案 3 :(得分:2)

一个非常简单的解决方案是添加一个可以存储在用户计算机上的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中的访问密钥,如果它存在于任何一个位置,则将它们放入。这样,一旦他们使用密钥访问网站,他们就可以直接访问网址。

答案 4 :(得分:0)

查看authlogic gem,特别是单一访问令牌功能。

您可以将404返回给未通过相应单一访问令牌作为参数的任何人。

答案 5 :(得分:0)

我构建了rack_staging gem来为自己处理这个用例,它也可能对你有用。

答案 6 :(得分:0)

我的(也很便宜)解决方案(使用基于类的视图的Django应用程序)是在我所有基于类的视图中使用SuperUserRequiredMixin,如下所示:

class BlogPostDetailView(SuperuserRequiredMixin, DetailView):
    template_name = "blogpost-detail.html"
    model = BlogPost

添加/删除此mixin是我的方法。