Создание бета-кода для общедоступного сайта django
-
01-07-2019 - |
Вопрос
Я собираюсь разместить бета-версию сайта, над которым я работаю, в Интернете.У него должен быть бета-код, чтобы ограничить доступ.Сайт написан на django.
Я не хочу менять фундаментальную систему аутентификации для адаптации к бета-коду, и меня не особенно волнует, что безопасность бета-кода железная, просто это существенный камень преткновения.
Как я должен это сделать?Это довольно большой проект, поэтому добавление кода в каждое представление далеко от идеального.
Это решение работает хорошо.Класс промежуточного программного обеспечения, в результате которого я получил вот это:
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
настройка.
Другие советы
Вероятно, вы можете ограничить доступ ко всему сайту через apache с помощью htaccess, полностью исключив проблему из пространства проекта django.
Сделайте то, что сделал StackOverflow.
У них была простая форма электронной почты / пароля.У него был один жестко закодированный пароль (falkensmaze).Когда пользователь правильно введет пароль, установите файл cookie.например.auth=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-страницы.