python - loginview - register and login django
Django 1.2: problema de inicio de sesión(parámetro GET: siguiente) (2)
Cuando un usuario anónimo intenta ir a / editor / 25 (por ejemplo) y se le redirige para iniciar sesión para la autenticación, "siguiente" es siempre Ninguno, incluso si está presente en la url (debe ser "/ editor / 25").
Esto suena extraño. ¿Puedes verificar que la URL efectivamente tiene ?next=/editor/25/
como cadena de consulta? También registre request.GET
y vea qué sucede.
Además, es posible que desee recoger el next
parámetro de request.GET
e incluirlo como una entrada oculta (opcional) en el formulario al procesar la plantilla. La vista de login
de login
del módulo de login
hace esto. De esta forma, su formulario puede recogerse a next
de request.POST
en POST
.
Tengo una nueva pregunta sobre django (publico una pérdida de estos en estos días ^^).
Aquí está mi situación: tengo una vista de inicio de sesión personalizada (registrada como URL de inicio de sesión en la configuración) donde autentico a los usuarios. Elegí hacer una vista personalizada para poder agregar mensajes y registrar.
La autenticación funciona bien, pero tengo un problema con el parámetro GET ''siguiente''. Se establece automáticamente por las vistas que redirigen a los usuarios para la autenticación. En mi opinión, se utiliza para redirigir al usuario después de un inicio de sesión exitoso.
Aquí está el código:
from django.http import HttpResponse
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.utils.translation import ugettext as _
from django.contrib import messages
from django.template import RequestContext
from django.contrib.auth import authenticate, login, logout
import logging
logger = logging.getLogger("views")
def login_user(request):
"""
Displays the login form or authenticates the user if called by POST.
"""
accepted = False
next = request.GET.get(''next'', None)
if not request.user.is_authenticated():
if request.POST:
# Get the form data and check the user credentials
username = request.POST[''username'']
password = request.POST[''password'']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
# Log the user in
login(request, user)
logger.info("Login of user : %s", user.username)
# Confirm the login
messages.success(request,_(''Login successful. Welcome !''))
accepted = True
else:
messages.error(request,_(''This account has been disabled by the administrator.''))
else:
messages.warning(request,_(''The given username or password is invalid. Please try again.''))
else:
# If already authenticated
accepted = True
# Choose where to go
if accepted:
return HttpResponse(next)
if next:
return HttpResponseRedirect(next)
else:
return HttpResponseRedirect(reverse(''myview''))
else:
return render_to_response(''login.html'',
context_instance=RequestContext(request))
El siguiente parámetro es correcto cuando el usuario está accediendo a la vista de inicio de sesión cuando ya está autenticado (first else).
Cuando un usuario anónimo intenta ir a / editor / 25 (por ejemplo) y se le redirige para iniciar sesión para la autenticación, "siguiente" es siempre Ninguno, incluso si está presente en la url (debe ser "/ editor / 25").
Debería haber un error simple en alguna parte. Tal vez tiene que ver con authenticate () o login () (django.contrib.auth).
Gracias por tu ayuda.
Aquí hay una solución de ejemplo de un problema similar: