1
resposta

[Dúvida] Botão de logout realmente funciona?

Tentei implementar o user.is_authenticated como uma forma de não permitir o login de alguém já logado, mas ao que me pareceu, o logout não funcionou corretamente:

def login(request):
    form = LoginForms()

    if request.method == 'POST':
        form = LoginForms(request.POST)

        if form.is_valid():

            nome=form['nome_login'].value()
            senha=form['senha'].value()

        usuario = auth.authenticate(
            request,
            username=nome,
            password=senha
        )
        if usuario is not None:
            if usuario.is_authenticated:
                auth.login(request, usuario)
                messages.success(request, f"{nome} você já está logado")
                return redirect('index')
            else:
                auth.login(request, usuario)
                messages.success(request, f"{nome} logado com sucesso")
                return redirect('index')
        else:
            messages.error(request, "Erro ao efetuar login")
            return redirect('login')


    return render(request, "usuarios/login.html", {"form": form})

No entanto uma vez feito o login, mesmo quando eu aperto o botão de logout, a próxima tentativa de login não ocorria. Estou usando errado o user.is_authenticated? Ainda, mesmo criando um user novo, na primeira tentativa eu já tenho o output de "user você já está logado".

1 resposta

Olá Luis, boa tarde, sou estudante e vou tentar ajudar, se for fazer tudo em um método eu criaria um paramêtro adicional enviado no POST quando fosse para logout

isLogout=form['logout'].value()  

considerando 'LOGOUT' como valor recebido, faria

if usuario is not None:
            if usuario.is_authenticated:
                if isLogout == 'LOGOUT':  
                  auth.logout(request)
                  messages.success(request, 'Logout efetuado com sucesso!')
                  return redirect('login')
                else:
                    auth.login(request, usuario)
                    messages.success(request, f"{nome} você já está logado")
                    return redirect('index')
            else:
                auth.login(request, usuario)
                messages.success(request, f"{nome} logado com sucesso")
                return redirect('index')
        else:

Outra forma seria chamar por GET e não POST exemplo, lá no front ao clicar botão de logout chamar a url

sua-url/logout

criaria um metodo para receber a requisição e deslogar

def logout(request):
    auth.logout(request)
    messages.success(request, 'Logout efetuado com sucesso!')
    return redirect('login')