Создание бета-кода для публичного сайта django
Я собираюсь поставить бета-версию сайта, над которым я работаю в Интернете. Для ограничения доступа необходимо иметь бета-код. Сайт написан на django.
Я не хочу менять фундаментальную систему Auth, чтобы разместить бета-код, и мне все равно, что безопасность бета-кода одета в железо, просто что это значительный камень преткновения.
Как мне это сделать? Это довольно большой проект, поэтому добавление кода ко всем представлениям далеко не идеальное.
Это решение работает хорошо. Класс Middleware я закончил с этим:
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))
Ответы
Ответ 1
Начните с этот фрагмент Django, но измените его, чтобы проверить request.session['has_beta_access']
. Если у них их нет, верните перенаправление на страницу "введите бета-код", которая при отправке с правильным кодом устанавливает эту переменную сеанса в True
.
Предоставление публичной бета-версии просто состоит в том, чтобы удалить это промежуточное программное обеспечение из вашего параметра MIDDLEWARE_CLASSES
.
Ответ 2
Возможно, вы можете ограничить доступ ко всему сайту через apache с помощью htaccess, полностью устраняя проблему из пространства проекта django.
Ответ 3
Сделайте то, что сделал StackOverflow.
У них была простая форма электронной почты/пароля. У него был один жесткий пароль (falkensmaze). Когда пользователь получит пароль, установите cookie. например. авт = 1
Не беспокойтесь, что это небезопасно. Кто заботится, если кто-то взломает бета-версию?
Apache/htaccess также является хорошим и простым решением.
Ответ 4
Вы можете добавить декораторы @login_required
по всей доске и сделать это. Если у вас нет функции просмотра на лодке, она не должна быть слишком ужасной.
Ответ 5
Я не уверен, какую версию кода Pinax вы используете, но они создали возможность закрыть сайт для частной бета-версии, поэтому вам не нужно много работать самостоятельно.
Ссылка на конкретный шаблон проекта для частного бета-сайта находится здесь: http://github.com/pinax/pinax/tree/3ad73d1ba44f37365333bae17b507668b0eb7e16/pinax/projects/private_beta_project, хотя я думаю, что они, возможно, добавили, что функциональность для всех шаблонов проектов.
Ответ 6
Отличный отрывок, но это привело к множеству проблем для меня связанных сессий OpenId. Поэтому я в конечном итоге полагаюсь на Cookies вместо сеанса:
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.