Django 1.2: problema de login (parâmetro GET: próximo)
Eu tenho uma nova pergunta sobre django (eu publico uma perda deles hoje em dia ^^).
Aqui está minha situação: Eu tenho uma visualização de login personalizada (registrada como URL de login nas configurações) em que autentico os usuários. Eu escolhi fazer uma exibição personalizada para poder adicionar mensagens e log.
A autenticação funciona bem, mas tenho um problema com o parâmetro GET 'next'. É definido automaticamente pelas visualizações que redirecionam os usuários para autenticação. Na minha opinião, é usado para redirecionar o usuário após um login bem-sucedido.
Aqui está o 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))
O próximo parâmetro está correto quando o usuário está acessando a visualização de login quando já está autenticado (o primeiro).
Quando um usuário anônimo tenta ir para / editor / 25 (por exemplo) e é redirecionado para fazer login para autenticação, "next" é sempre None, mesmo que esteja presente na URL (deve ser "/ editor / 25").
Deve haver um erro simples em algum lugar. Talvez tenha a ver com authenticate () ou login () (django.contrib.auth).
Obrigado pela ajuda.