パブリック Django サイトのベータ コードを作成する
-
01-07-2019 - |
質問
現在制作中のサイトのベータ版を Web 上に公開しようとしています。アクセスを制限するにはベータコードが必要です。このサイトはジャンゴで書かれています。
私はベータ コードに対応するために基本的な認証システムを変更するつもりはありません。また、ベータ コードのセキュリティが鉄壁であることは特に気にしません。ただ、それが重大な障害になるだけです。
これはどうすればよいでしょうか?これはかなり大規模なプロジェクトであるため、すべてのビューにコードを追加するのは理想とは程遠いです。
その解決策はうまく機能します。ミドルウェア クラスは次のようになりました。
from django.http import HttpResponseRedirect
class BetaMiddleware(object):
"""
Require beta code session key in order to view any page.
"""
def process_request(self, request):
if request.path != '/beta/' and not request.session.get('in_beta'):
return HttpResponseRedirect('%s?next=%s' % ('/beta/', request.path))
解決
皮切りに この Django スニペット, ですが、確認するために変更します request.session['has_beta_access']
. 。それを持っていない場合は、「ベータ コードを入力」ページへのリダイレクトを返すように設定します。このページに正しいコードが投稿されると、セッション変数が次のように設定されます。 True
.
パブリックベータ版にする場合は、そのミドルウェアをコンピュータから削除するだけです。 MIDDLEWARE_CLASSES
設定。
他のヒント
おそらく、htaccess を使用して Apache 経由でサイト全体へのアクセスを制限し、問題を Django のプロジェクト領域から完全に取り除くことができます。
StackOverflow が行ったことを実行します。
シンプルなメールアドレスとパスワードのフォームがありました。ハードコードされたパスワード (falkensmaze) が 1 つありました。ユーザーが正しいパスワードを取得したら、Cookie を設定します。例えば。認証=1
安全でないことを心配する必要はありません。誰かがベータ版にハッキングしても誰が気にするでしょうか?
Apache/htaccess も優れたシンプルなソリューションです。
追加できるはずです @login_required
装飾者全員がこれで終わりです。大量のビュー機能を持っていない限り、それほどひどいことにはならないはずです。
使用している Pinax コードのバージョンはわかりませんが、プライベート ベータ版としてサイトを閉鎖する機能が組み込まれているため、自分で多くの作業を行う必要はありません。
プライベート ベータ サイトの特定のプロジェクト テンプレートへのリンクは次のとおりです。 http://github.com/pinax/pinax/tree/3ad73d1ba44f37365333bae17b507668b0eb7e16/pinax/projects/private_beta_project ただし、その後、すべてのプロジェクト テンプレートにその機能が追加されたのではないかと思います。
素晴らしいスニペットですが、OpenId セッションに関連して多くの問題が発生しました。したがって、セッションではなく Cookie に依存することになります。
class BetaMiddleware(object):
"""
Require beta code cookie key in order to view any page.
"""
set_beta = False
def process_request(self, request):
referer = request.META.get('HTTP_REFERER', '')
if request.method == 'GET' and not 'is_in_beta' in request.COOKIES:
return HttpResponseRedirect('%s?next=%s' % ('/beta/', request.path))
if request.method == 'POST' and 'pass' in request.POST:
code = request.POST['pass']
if code=='beta':
self.set_beta = True
return HttpResponseRedirect('%s' % '/')
def process_response(self, request, response):
if self.set_beta is True:
response.set_cookie('is_in_beta', '1')
return response
安全ではありませんが、私にとっては十分です。これはベータ版の HTML ページでも機能します。