アプリケーションを完全にプライベートに保ち、開発者だけにアクセスを許可する方法はありますか?
ランダムなユーザーがURLを入力すると、空白のページのようになりますが、開発者がURLを入力すると、アプリにアクセスできるようになります。
私の安価な解決策は、すべてのアクションが実行される前にHTTP認証を要求するbefore_filterを実装することでした。
このソリューションは、他の認証レイヤー(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認証を求められ、後で他の認証が行われている場合は求められます。
Herokuアドオン を使用して、アプリケーションへのアクセスを許可するユーザーの電子メールを指定し、Persona(別名BrowserID)を使用してユーザーを認証できるようになりました(サイト固有のパスワードは必要ありません)。
本当に簡単な解決策は、ユーザーのマシンの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に直接アクセスできます。
Authlogic gem、特にシングルアクセストークン機能を確認してください。
適切なシングルアクセストークンを引数として渡さない人には、404を返すことができます。
私の(これも安価な)ソリューション(クラスベースのビューを使用するDjangoアプリ)は、次のようにすべてのクラスベースのビューでSuperUserRequiredMixin
を使用することです。
class BlogPostDetailView(SuperuserRequiredMixin, DetailView):
template_name = "blogpost-detail.html"
model = BlogPost
このミックスインを追加/削除するのが私のやり方です。
このユースケースを自分で処理するために rack_staging gemを作成しました。これは、あなたにも役立つかもしれません。