depois dessa aula, meu login fica informando que está autenticado e que não pode ver a galeria.
Alguém sabe informar como corrigir ?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
depois dessa aula, meu login fica informando que está autenticado e que não pode ver a galeria.
Alguém sabe informar como corrigir ?
Olá, Daniele. Como vai?
Esse comportamento é um clássico problema de conflito de fluxo ou persistência de mensagens na sessão do Django. Analisando a imagem que você compartilhou, podemos notar dois problemas acontecendo simultaneamente no topo da tela: a mensagem de sucesso de login para o usuário "bruno" aparece ao mesmo tempo que a mensagem informando que o usuário não está logado.
Isso geralmente acontece por dois motivos principais no código das suas views ou no seu template: as mensagens antigas não estão sendo limpas corretamente ou a verificação do estado de autenticação (user.is_authenticated) na rota da galeria está deixando passar alguma condição antiga.
Para corrigir isso, precisamos checar dois pontos principais no seu projeto:
O Django armazena as mensagens na sessão e as exibe na próxima requisição. Se o loop de exibição no seu template HTML não estiver consumindo as mensagens corretamente, elas podem acabar acumulando e aparecendo juntas.
Verifique no seu arquivo HTML (geralmente no base.html ou onde a barra de navegação/alertas fica) se a estrutura do loop está parecida com esta:
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">
{{ message }}
</div>
{% endfor %}
{% endif %}
Garantir que as mensagens sejam iteradas corretamente faz com que o Django as limpe automaticamente da sessão após a exibição.
Outro ponto crítico é a lógica dentro do arquivo views.py na função responsável pelo login. Certifique-se de que, após o método auth.login(request, user) ser executado com sucesso, a requisição seja redirecionada imediatamente utilizando redirect, e não apenas renderizada com render.
Se você usar render logo após o login, o estado do usuário na requisição atual pode não se atualizar corretamente para o template. O código ideal deve seguir este padrão:
from django.shortcuts import render, redirect
from django.contrib import auth
from django.contrib import messages
def login(request):
# ... código de validação do formulário ...
if formulario.is_valid():
nome = formulario['nome_login'].value()
senha = formulario['senha'].value()
usuario = auth.authenticate(request, username=nome, password=senha)
if usuario is not None:
auth.login(request, usuario)
messages.success(request, f"{nome} logado com sucesso!")
return redirect('index') # Altere para a sua rota da galeria ou home
else:
messages.error(request, "Erro ao efetuar login")
return redirect('login')
Na barra de navegação, onde exibe o texto "Usuário não logado", verifique se você colocou a tag condicional do Django corretamente para ocultar essa mensagem quando houver um usuário ativo:
{% if request.user.is_authenticated %}
<p>Olá, {{ request.user.username }}</p>
{% else %}
<p>Usuário não logado. Faça login para acessar a galeria</p>
{% endif %}
Dê uma olhada nesses três pontos no seu código, salve as alterações e faça um teste limpando o cache do navegador ou testando em uma aba anônima para garantir que nenhuma sessão antiga interfira no comportamento.
Espero que possa ter lhe ajudado!