Вопрос

Я собираюсь разместить бета-версию сайта, над которым я работаю, в Интернете.У него должен быть бета-код, чтобы ограничить доступ.Сайт написан на 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-страницы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top