Создание бета-кода для публичного сайта django - PullRequest
11 голосов
/ 20 сентября 2008

Я собираюсь разместить в сети бета-версию сайта, над которым я работаю. Он должен иметь бета-код, чтобы ограничить доступ. Сайт написан на джанго.

Я не хочу менять основную систему аутентификации для приспособления к бета-коду, и мне совершенно безразлично, что безопасность бета-кода покрыта железом, просто это серьезный камень преткновения.

Как мне это сделать? Это довольно большой проект, поэтому добавление кода в каждое представление далеко от идеала.


Это решение хорошо работает. Класс 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))

Ответы [ 6 ]

19 голосов
/ 20 сентября 2008

Начните с этого фрагмента Django , но измените его для проверки request.session['has_beta_access']. Если у них его нет, пусть он вернет перенаправление на страницу «введите бета-код», которая при публикации с правильным кодом устанавливает для этой переменной сеанса значение True.

Сделав его общедоступной бета-версией, вы просто удалите это промежуточное ПО из настроек MIDDLEWARE_CLASSES.

4 голосов
/ 20 сентября 2008

Вероятно, вы можете ограничить доступ ко всему сайту через apache с помощью htaccess, полностью исключив проблему из пространства проекта django.

2 голосов
/ 20 сентября 2008

Сделайте то, что сделал StackOverflow.

У них была простая форма электронной почты / пароля. У него был один жестко запрограммированный пароль (falkensmaze). Когда пользователь получает пароль правильно, установите cookie. например. AUTH = 1

Не беспокойся, что это небезопасно. Какая разница, если кто-то взломает бета-версию?

Apache / htaccess также является хорошим и простым решением.

0 голосов
/ 20 ноября 2009

Отличный фрагмент кода, но он вызвал много проблем для меня, связанных с сессиями 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.

0 голосов
/ 08 августа 2009

Я не уверен, какую версию кода Pinax вы используете, но они встроили возможность закрыть сайт для частной беты, поэтому вам не нужно много работать самостоятельно.

Ссылка на конкретный шаблон проекта для частного бета-сайта находится здесь: http://github.com/pinax/pinax/tree/3ad73d1ba44f37365333bae17b507668b0eb7e16/pinax/projects/private_beta_project, хотя я думаю, что с тех пор они могли добавить эту функциональность ко всем шаблонам проектов.

0 голосов
/ 20 сентября 2008

Вы должны иметь возможность добавить @login_required декораторов по всей доске и покончить с этим. Если у вас нет множества функций просмотра, это не должно быть слишком ужасно.

...