Создание бета-кода для публичного сайта 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.