1
resposta

Flask Usuário Não Logado

No curso de Flask: crie uma webapp com Python, objtive um erro na autenticação de multiplos usuários, mesmo inserindo os dados, eu recebo a mensagem de "Usuario Não Logado". Até utilizei o arquivo dá aula e o mesmo erro acontece. Segue meu código:

from flask import Flask, render_template, request, redirect, session, flash, url_for
class Jogo:
    def __init__ (self, nome, categoria, console):
        self.nome = nome
        self.categoria = categoria
        self.console = console


jogo1 = Jogo('Tetris' , "Puzzle" , "Atari")
jogo2 = Jogo("God of War" , "Rack in Slash" , "Ps2")
jogo3 = Jogo("Mortal Kombat" , "Luta", "Ps2")
lista = [jogo1, jogo2, jogo3]




app = Flask(__name__)
app.secret_key = 'karol'

class Usuario:
    def __init__ (self, nome, nickname, senha):
        self.nome = nome
        self.nickname= nickname
        self.senha = senha

usuario1=Usuario("Karoline Cafisso", "KC", "karoline")
usuario2=Usuario("Jonatas Oliveira", "Jon" , "jonatas")
usuario3=Usuario("Marco Antonio", "Maco" , "Miauzinho")
usuarios = { usuario1.nickname: usuario1,
                     usuario2.nickname: usuario2,
                     usuario3.nickname: usuario3 }

@app.route('/') #cria uma rota
def index():

    return render_template('lista.html', titulo='Jogos', jogos = lista) #passa uma variavel do arquivo html para cá

@app.route('/novo') #criando uma nova rota pra nova pagina
def novo():
    if 'usuario_logado' not in session or session ['usuario_logado'] == None:
        return redirect(url_for('login', proxima=url_for('novo')))
    return render_template('novo.html', titulo= 'Novo Jogo')

@app.route ('/criar', methods=["POST",]) #nova rota para cadastrar jogos
def criar():
    nome = request.form["nome"]
    categoria = request.form["categoria"]
    console = request.form["console"]
    jogo = Jogo (nome, categoria, console) #Passa o valor criado para cada categoria
    lista.append(jogo) #insere os novos jogos na lista
    return redirect(url_for('index')) #redireciona paga a pagina principal com as listas

@app.route ('/login')
def login():
    proxima = request.args.get('proxima')  #pega a info da rota novo
    return render_template('login.html' , proxima=proxima)

@app.route ('/logout')
def logout():
    session['usuario_logado'] = None
    flash('Logout efetuado com sucesso!')
    return redirect(url_for('index'))

@app.route ('/autenticar' , methods=['POST',])
def autenticar():
    if request.form["usuario"] in usuarios:
        usuario = usuarios[request.form['usuario']]
        if request.form['senha'] == usuario.senha:
            session['usuario_logado'] = usuario.nickname
            flash(usuario.nickname + ' logado com sucesso!')  # mensagem de login para o usuario
            proxima_pagina = request.form['proxima']  # captura a info do html
            return redirect(proxima_pagina)

    else:
        flash("Usuario Não logado")
        return redirect(url_for('login'))

app.run(debug=True) #debug faz com que nao precise rodar sempre a cada atualização




1 resposta

Olá Karoline, tudo bem com você?

Peço desculpas pela demora no retorno.

Realizei testes e simulações com o código enviado e o mesmo funcionou conforme o esperado, não apresentando a mensagem Usuário Não Logado quando informado as credenciais corretas, os testes foram realizados usando parte dos arquivos da aula.

Peço que realize um novo teste do código. Inicie o servidor clicando com o botão direito no arquivo jogoteca.py e escolhendo Run jogoteca, acesse a página de login do servidor, http://127.0.0.1:5000/login.

Ao acessar a página de login (/login) no campo Nome de usuário devemos fornecer o nickname do usuário cadastrado, no seu código poderá ser KC, Jon ou Maco, forneça um dos nickname e sua respectiva senha. Clique no botão Entrar, o usuário escolhido será logado no site.

Caso o continue apresentando a mensagem de erro, peço que compartilhe o seu projeto completo, assim poderei realizar mais simulações e testes com os arquivos. Para compartilhar um projeto no fórum, basta compactar os arquivos do seu projeto, realizar o upload do arquivo compactado em um site de compartilhamento e disponibilizar o link de compartilhamento na resposta desta postagem.

Abraços e bons estudos.

Fico no aguardo e à disposição