1
resposta

[Dúvida] cadastro e login

ola, boa tarde,

estou tentando fazer o meu sistema, so que ao inves do jogo eu estou criando um sistema de cadastro e login(muitos clientes me pedirao isso). a parte do cadastro eu consegui. o sistema pega o input de um dicionario com os dados do cliente e joga para uma lista. porem em autenticar nao estou conseguindo acessar os dados, como fazer?

from flask import Flask, render_template, request, redirect, session, flash, url_for

class Usuario(): def init(self, nome, sobrenome, cpf, telefone, email, senha): self.nome = nome self.sobrenome = sobrenome self.cpf = cpf self.telefone = telefone self.email = email self.senha = senha

usuario1 = Usuario("paty", "araujo", "08130136997", "0123499992121", "fhfhfh@gmail.com", "paty") usuario2 = Usuario("caio", "araujo", "08130136997", "0123499992121", "fhfhfh@gmail.com", "caio")

usuarios = [usuario1, usuario2]

app = Flask(name) app.secret_key = '%$B0mn3g0c1o@#'

@app.route('/') def index(): return render_template('index.html')

@app.route('/cadastro') def cadastro(): return render_template('cadastro.html')

@app.route('/cadastrar', methods = ["POST"], ) def cadastrar(): nome = request.form ['nome'] sobrenome = request.form ['sobrenome'] cpf = request.form ['cpf'] telefone = request.form ['telefone'] email = request.form ['email'] senha = request.form ['senha']

usuario = Usuario (nome, sobrenome, cpf, telefone, email, senha )
usuarios.append(usuario)
return redirect(url_for('dashboard'))

@app.route('/admin') def admin(): return render_template('admin.html', usuarios = usuarios)

@app.route('/login') def login(): return render_template('login.html')

@app.route('/autenticar', methods = ["POST"], ) def autenticar(): if request.form['usuario'] in usuarios: #aqui usuario = usuarios[request.form['usuario']]#aqui if request.form['senha'] == usuario.senha:#aqui session['usuario_logado'] = usuario.cpf#aqui flash(usuario.nome + ' logado com sucesso!') return redirect(url_for('dashboard')) else: flash('Usuário não logado.') return redirect(url_for('login'))

@app.route('/dashboard') def dashboard():

if 'usuario_logado' not in session or session['usuario_logado'] == None:

return redirect ('/login')

return render_template('dashboard.html') 

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

app.run(debug=True)

1 resposta

Oii Pelo que vi no teu código, a ideia é criar um sistema de cadastro e login usando Flask, certo?

Vamos lá:

Autenticação: O problema está na forma como você está tentando fazer a autenticação. No trecho:

if request.form['usuario'] in usuarios:

Você está tentando verificar se o usuário inserido está na lista de usuários. O problema é que request.form['usuario'] provavelmente vai te retornar um e-mail, e você está tentando comparar isso com um objeto Usuario.

Solução: Vou te dar uma solução rápida. Ao invés de verificar se o e-mail está na lista, você pode procurar pelo e-mail na lista e, se encontrar, verificar a senha.

Aqui está uma forma de fazer isso:

@app.route('/autenticar', methods=["POST"])
def autenticar():
    email = request.form['email']
    senha = request.form['senha']

    for usuario in usuarios:
        if usuario.email == email and usuario.senha == senha:
            session['usuario_logado'] = usuario.cpf
            flash(usuario.nome + ' logado com sucesso!')
            return redirect(url_for('dashboard'))

    flash('E-mail ou senha incorretos.')
    return redirect(url_for('login'))

Basicamente, estou iterando sobre a lista de usuários e comparando o e-mail e senha inseridos com os e-mails e senhas dos usuários na lista. Se encontrar um match, você está logado. Se não, ele vai mostrar uma mensagem de erro.

É importante lembrar que guardar senhas em texto puro não é seguro. Em aplicações reais, você deve usar técnicas de hashing para armazenar e verificar senhas. O Python tem bibliotecas como bcrypt que podem te ajudar nisso.

Espero que isso te ajude!