1
resposta

Erro ao fazer login

O professor mostra na aula fazendo login apenas através do /novo e ok por aí funciona, mas ao tentar fazer login por /login dá o seguinte erro:

Not Found
The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

mesmo assim apos eu voltar pro index aparece a mensagem de logado com sucesso.

Eu acho que se o /login tá disponível tem que funcionar também e após fazer esse login ser redirecionado pra algum lugar sem erros.

1 resposta

Olá Marcelo, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Fico feliz que tenha levantado essa questão. Quando um usuário realiza o login acessando diretamente a rota /login, a variável proxima_pagina receberá o valor None e este valor será enviado para a rota /autenticar que, após a autenticação realiza a tentativa de redirecionamento para a rota /None que não é válida, gerando o erro.

Para corrigir isso, podemos modificar a rota /autenticar para que um usuário consiga realizar o login acessando diretamente a rota /login. Para isso, sempre que um usuário não logado acessar a rota /login, ele será redirecionado para rota /index, após um login com sucesso.

Na rota /autenticar será adicionado uma verificação do valor salvo na variável proxima_pagina e caso seja "None" iremos atribuir a ela um novo valor, neste caso, url_for('index'), para redirecionar o usuário para a página inicial. Além disso, retiraremos a criação da variável proxima_pagina da verificação de usuário existente e a colocaremos no início da função, para que independemente se for um usuário válido ou não, o valor de proxima_pagina seja obtido.

No código abaixo é apresentado o código da rota /autenticar com as mudanças já implementadas.

@app.route('/autenticar', methods=['POST', ])
def autenticar():
    proxima_pagina = request.form['proxima']

    if request.form['usuario'] in usuarios:
        usuario = usuarios[request.form['usuario']]
        if request.form['senha'] == usuario.senha:
            session['usuario_logado'] = usuario.nickname
            flash(usuario.nome + ' logado com sucesso!')
            if proxima_pagina == "None":
                proxima_pagina = url_for('index')
            return redirect(proxima_pagina)

    flash('Usuário não cadastrado ou senha incorreta')
    return redirect(url_for('login', proxima=proxima_pagina))

No código acima, caso a condicional if não seja satisfeita iremos retornar a mensagem de Usuário não cadastrado ou senha incorreta.

Resultado:

Início da transcrição. GIF contendo a execução da tentativa e login no site jogoteca, o fundo da tela é branco contendo letras nas cores pretas. O usuário acessa o formulário de login, contendo dois campos, nome e senha, após o preenchimento usando uma senha errada o formulário é recarregado e é informado nome e senha corretas, neste momento o usuário é direcionado para  a página inicial. O GIF reinicia. Fim da transcrição.

Após adicionar o novo código para a rota de autenticação, salve o arquivo jogoteca.py e execute-o, acesse a rota http://127.0.0.1:5000/login e realize um novo acesso com um usuário cadastrado.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!