python - did you forget to register or load this tag
Hacer un código beta para un sitio público django (6)
Estoy a punto de poner una versión beta del sitio en el que estoy trabajando en la web. Necesita tener un código beta para restringir el acceso. El sitio está escrito en django.
No quiero cambiar el sistema Auth básico para acomodar un código beta, y no me importa en particular que la seguridad del código beta esté revestida de hierro, solo que es un obstáculo significativo.
¿Cómo debería hacer esto? Es un proyecto bastante grande, por lo que agregar código a cada vista dista mucho de ser ideal.
Esa solución funciona bien. La clase de Middleware I terminó con esto:
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))
Comience con este fragmento de Django , pero request.session[''has_beta_access'']
para verificar request.session[''has_beta_access'']
. Si no lo tienen, haga que devuelva un redireccionamiento a la página "ingresar código beta" que, cuando se publica con el código correcto, establece esa variable de sesión en True
.
Convertirlo en una versión beta pública simplemente consiste en eliminar ese middleware de su configuración MIDDLEWARE_CLASSES
.
Debería poder agregar @login_required
decorators en general y terminarlo. A menos que tenga una carga de funciones de vista, no debería ser demasiado horrible.
Haz lo que hizo .
Tenían un formulario simple de correo electrónico / contraseña. Tenía una sola contraseña codificada (falkensmaze). Cuando el usuario obtiene la contraseña correcta, configure una cookie. p.ej. auth = 1
No te preocupes por que no sea seguro. ¿A quién le importa si alguien piratea la versión beta?
Apache / htaccess es también una solución agradable y simple.
No estoy seguro de la versión del código Pinax que está utilizando, pero han creado la capacidad de cerrar el sitio para una versión beta privada, por lo que no es necesario que trabaje mucho.
El enlace a la plantilla del proyecto específico para un sitio beta privado está aquí: http://github.com/pinax/pinax/tree/3ad73d1ba44f37365333bae17b507668b0eb7e16/pinax/projects/private_beta_project aunque creo que desde entonces pueden haber agregado esa funcionalidad a todo el proyecto plantillas.
Probablemente puedas restringir el acceso a todo el sitio a través de apache con htaccess, eliminando por completo el problema del espacio del proyecto django.
Un gran fragmento, pero resultó en muchos problemas para mí relacionados con las sesiones de OpenId. Así que termino confiando en Cookies en lugar de la Sesión:
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
No es seguro, pero eso es suficiente para mí. Esto también funciona con solo una página beta html.