template register loginview has custom contrib auth attribute and python django authentication login

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.