Pergunta

Estou prestes a colocar uma versão beta do site que estou trabalhando em cima da web. Ele precisa ter um código beta para restringir o acesso. O site está escrito em Django.

Eu não quero mudar o sistema Auth fundamental para acomodar um código beta, e eu não me importo particularmente que a segurança do código beta é o ferro-folheados, apenas que é um obstáculo significativo.

Como devo fazer isso? É um projeto bastante grande, assim que adicionar código para cada ponto de vista é longe do ideal.


Essa solução funciona bem. A Classe I Middleware acabou com este este:

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))
Foi útil?

Solução

Comece com este Django trecho , mas modificá-lo para verificar request.session['has_beta_access']. Se eles não tem, então tê-lo retornar um redirecionamento para uma página "introduza o código beta" que, quando lançados com o código certo, conjuntos que variável de sessão para True.

Tornando-se um beta público, em seguida, apenas consiste em remover esse middleware a partir do seu ambiente MIDDLEWARE_CLASSES.

Outras dicas

Você provavelmente pode restringir o acesso a todo o site via apache com htaccess, levando o problema para fora do espaço de projeto do django inteiramente.

Do que StackOverflow fez.

Eles tinham uma forma de e-mail / senha simples. Ele tinha uma única senha embutida (falkensmaze). Quando o usuário recebe a senha correta definir um cookie. por exemplo. auth = 1

Não se preocupe sobre ele ser inseguro. Quem se importa de se alguém hacks para a versão beta?

Apache / htaccess é também uma boa e simples solução.

Você deve ser capaz de adicionar decoradores @login_required em toda a linha e ser feito com ele. A menos que você tem um barco de carga de funções de visualização, ele não deve ser muito horrível.

Eu não tenho certeza do que versão do código Pinax você está usando, mas eles construíram na capacidade de fechar o site off para um beta privado para que você não precisa fazer muito trabalho sozinho.

O link para o modelo de projeto específico para um site beta privado é aqui: http://github.com/pinax/pinax/tree/3ad73d1ba44f37365333bae17b507668b0eb7e16/pinax/projects/private_beta_project embora eu acho que eles poderiam ter desde acrescentou que a funcionalidade para todos os modelos de projeto.

Great trecho mas resultou muitos problemas para mim sessões OpenId relacionados. Então eu acabo contando com biscoitos em vez da Sessão:

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

Não é seguro, mas isso é suficiente para mim. Isso também funciona com apenas uma página beta html.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top