Estoy trabajando para intentar crear un método de inicio de sesión desde hace un tiempo. Estoy ejecutando una aplicación Flask y funciona bien. Todo se ejecuta localmente en mi máquina. Actualmente, estoy usando pymongo y MongoClient para hacer mi conexión a la base de datos. Todo esto está funcionando bien y me gustaría no cambiar esto si es posible.
Estoy tratando de usar Flask-Login para crear una clase de users usando usermixin . Aquí es donde he tenido un gran fracaso. He intentado algunas cosas diferentes y mi problema es cómo extraer los datos de mi base de datos. He hecho esto anteriormente con una base de datos SQL, pero para este proyecto quiero usar expresamente MongoDB. Este es el tutorial que estaba tratando de seguir, pero tengo dificultades para entender todo porque no se explica bien lo que hace cada línea.
Esta es mi conexión a mi base de datos: client = MongoClient('mongodb://localhost:27017')
y esta es mi clase de usuarios actual que no tengo funcionando y donde necesito ayuda.
class User(UserMixin): def __init__(self, username, password_hash): self.username = username self.password_hash = password_hash def check_password(self, password): return check_password_hash(self.password_hash, password) def get_id(self): return self.username @login_manager.user_loader def load_user(user_id): return User.objects(pk=user_id).first()Entonces mi última parte es mi formulario de inicio de sesión:
@app.route('/login', methods=["GET" , "POST"]) def login(): if request.method == "GET": return render_template("login.html", error=False) if request.method == "POST": check_user = request.form["username"] if check_user: if check_password_hash(check_user['password'], request.form["password"]): login_user(check_user) return redirect(url_for('index')) Soy consciente de que este tutorial usa MongoEngine que no estoy usando, o todavía no, pero alguna ayuda aquí, ya sea sobre cómo hacer que este código anterior funcione o cómo adaptarlo, sería genial. Cuando ejecuto este código, no recibo ningún error, simplemente no funciona. Mi prueba es que trato de iniciar sesión y luego trato de ir a la página de cierre de sesión que se carga con el siguiente código:
@app.route("/logout") @login_required def logout(): logout_user() return redirect(url_for('index'))Cuando lo hago, no carga la página y recibo un aviso de página no autorizada. Por lo tanto, sé que mi código no funciona. Por último, tengo todas las plantillas en una ubicación de archivo estática.
Gracias de antemano por la ayuda y, por favor, si algo no está claro, pregunte e intentaré agregar más detalles. Cuanto más específico, mejor podré ayudar.
ACTUALIZAR:
Me di cuenta de que probablemente también sea importante describir cómo está estructurada mi base de datos para asegurarme de que estoy accediendo a ella correctamente porque ese es un punto importante en el que tengo problemas. Tengo una base de datos con mi colección llamada Usuarios y está estructurada con cada documento como un registro de usuario diferente, así:
{ "_id" : 1, "Reset" : false, "FirstName" : "John", "LastName" : "Doe", "Email" : "JohnDoe@gmail.com", "Username" : "", "admin" : false, "Pass" : "[hashed_password]" } { "_id" : 2, "Reset" : true, "FirstName" : "Jane", "LastName" : "Smith", "Email" : "JaneSmith@hotmail.com", "Username" : "Jane", "admin" : false, "Pass" : "[hashed_password]" } { "_id" : 3, "Reset" : true, "FirstName" : "Gary", "LastName" : "Bettman", "Email" : "GBettman@yahoo.com", "Username" : "HockeyGuy", "admin" : false, "Pass" : "[hashed_password]" }