Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Ainda não consigo fazer login.


HTML LOGIN

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>login</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='bootstrap.css') }}">
  </head>
  <body>
    <div class="container">      

        {% with messages = get_flashed_messages() %}
            {% if messages %} 
                <ul id="messages" class="list-unstyled">
                {% for message in messages %}
                    <li class="alert alert-success">{{ message }}</li>
                {% endfor %}
                </ul>
            {% endif %}
        {% endwith %}

        <h1>Faça seu login</h1>
        <form method="POST" action="{{url_for('autenticar')}}">
            <input type="hidden" name="proxima" value="{{proxima}}">
            <p><label>Nome de usuário:</label> <input class="form-control" type="text" name="usuario" required></p>
            <p><label>Senha:</label> <input class="form-control" type="password" name="senha" required></p>
            <p><button class="btn btn-primary" type="submit">Entrar</button></p>
        </form>
    </div>
</body>
</html>





JOGOTECA PYTHON

@app.route('/login')
def login():
    proxima = request.args.get('proxima')
    return render_template('login.html', proxima=proxima)

@app.route('/autenticar', methods=['POST' ,])
def autenticar():
    usuario = Usuarios.query.filter_by(nickname=request.form['usuario']).first()
    if usuario:
        if request.form['senha'] == usuario.senha:
            session['usuario_logado'] = usuario.nickname
            flash(usuario.nickname  + ' logado com sucesso!')
            proxima_pagina = request.form['proxima']
            return redirect(proxima_pagina)    
    else:
        flash('Usuário não logado!')
        return redirect(url_for('login'))
    
    
@app.route('/logout')
def logout():
    session['usuario_logado'] = None
    flash('Logout efetuado com sucesso!')
    return redirect(url_for('index'))




app.config['SQLALCHEMY_DATABASE_URI'] = \
    '{SGBD}://{usuario}:{senha}@{servidor}/{database}'.format(
        SGBD = 'mysql+mysqlconnector',
        usuario = 'root',
        senha = 'admin',
        servidor = 'localhost',
        database = 'jogoteca'
    )



@app.route('/novo')
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')

``
4 respostas
solução!

Olá! Bom dia!

Pelo que você descreveu, parece que o problema pode estar relacionado à forma como você está tentando acessar os dados do formulário ou à lógica de autenticação. Vou sugerir algumas verificações e ajustes que podem ajudar a resolver o problema:

  1. Verifique o Nome dos Campos do Formulário: Certifique-se de que os nomes dos campos no seu formulário HTML correspondem exatamente aos que você está usando no request.form. Por exemplo, se no HTML o campo do usuário estiver com o nome name="usuario", ele deve ser acessado como request.form['usuario'].

  2. Verifique se o Campo 'proxima' Está Sendo Enviado: No seu código, você está tentando redirecionar para request.form['proxima']. Certifique-se de que esse campo está presente no formulário e está sendo enviado corretamente. Caso contrário, pode causar erros.

  3. Mensagens de Erro: O trecho do erro que você compartilhou mostra apenas onde o erro ocorre, considere mandar o log ou prints com mais informações sobre o erro.

Espero que essas dicas te ajudem a solucionar o problema!

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.
Boa tarde! Ainda não consigo fazer o login. realizei todas as suas sugestões, mas não funcionou. Mandei o código HTML também.
Preciso de ajuda!!!!


HTML LOGIN

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>login</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='bootstrap.css') }}">
  </head>
  <body>
    <div class="container">      

        {% with messages = get_flashed_messages() %}
            {% if messages %} 
                <ul id="messages" class="list-unstyled">
                {% for message in messages %}
                    <li class="alert alert-success">{{ message }}</li>
                {% endfor %}
                </ul>
            {% endif %}
        {% endwith %}

        <h1>Faça seu login</h1>
        <form method="POST" action="{{url_for('autenticar')}}">
            <input type="hidden" name="proxima" value="{{proxima}}">
            <p><label>Nome de usuário:</label> <input class="form-control" type="text" name="usuario" required></p>
            <p><label>Senha:</label> <input class="form-control" type="password" name="senha" required></p>
            <p><button class="btn btn-primary" type="submit">Entrar</button></p>
        </form>
    </div>
</body>
</html>





JOGOTECA PYTHON

@app.route('/login')
def login():
    proxima = request.args.get('proxima')
    return render_template('login.html', proxima=proxima)

@app.route('/autenticar', methods=['POST' ,])
def autenticar():
    usuario = Usuarios.query.filter_by(nickname=request.form['usuario']).first()
    if usuario:
        if request.form['senha'] == usuario.senha:
            session['usuario_logado'] = usuario.nickname
            flash(usuario.nickname  + ' logado com sucesso!')
            proxima_pagina = request.form['proxima']
            return redirect(proxima_pagina)    
    else:
        flash('Usuário não logado!')
        return redirect(url_for('login'))
    
    
@app.route('/logout')
def logout():
    session['usuario_logado'] = None
    flash('Logout efetuado com sucesso!')
    return redirect(url_for('index'))




app.config['SQLALCHEMY_DATABASE_URI'] = \
    '{SGBD}://{usuario}:{senha}@{servidor}/{database}'.format(
        SGBD = 'mysql+mysqlconnector',
        usuario = 'root',
        senha = 'admin',
        servidor = 'localhost',
        database = 'jogoteca'
    )



@app.route('/novo')
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')

Oi, tudo bem?

O código parece estar correto em sua estrutura geral, mas vou sugerir alguns ajustes e verificações importantes:

  1. Verifique se o campo "proxima" está sendo enviado corretamente. Quando o formulário é renderizado, o campo de "proxima" precisa ter um valor. No código, o valor está sendo passado como {{proxima}}, mas é importante garantir que o valor de proxima seja enviado corretamente para o formulário HTML.

    Solução: Verifique se no método login a variável proxima está sendo passada corretamente para o template. Caso contrário, isso pode gerar um erro ao tentar fazer o redirecionamento após o login.

  2. Ajuste a condição no método autenticar. Caso o usuario não seja encontrado no banco, a linha flash('Usuário não logado!') não será mostrada corretamente. Vamos melhorar isso para garantir que qualquer falha no login gere a mensagem adequada.

    Solução: Ajuste o método de autenticação da seguinte forma:

    
    @app.route('/autenticar', methods=['POST'])
    def autenticar():
        usuario = Usuarios.query.filter_by(nickname=request.form['usuario']).first()
        if usuario and request.form['senha'] == usuario.senha:
            session['usuario_logado'] = usuario.nickname
            flash(f'{usuario.nickname} logado com sucesso!')
            proxima_pagina = request.form['proxima']
            return redirect(proxima_pagina)
        else:
            flash('Usuário ou senha incorretos!')
            return redirect(url_for('login'))
    
  3. Verifique o banco de dados. Certifique-se de que o nome de usuário e a senha no banco de dados estão corretos e coincidem exatamente com o que você está tentando autenticar. Se houver algum problema com o banco de dados, a verificação falhará.

Com esses ajustes, o login deve funcionar corretamente.

Fico à disposição!

Bom dia! Resolvido. Muito obrigado.