Problem mit Flask Session

Django, Flask, Bottle, WSGI, CGI…
Antworten
richtigerkevin
User
Beiträge: 2
Registriert: Samstag 4. Januar 2020, 21:37

Ein schönen Abend erstmal an euch alle.
Zurzeit habe ich ein Problem mit den Flask user sessions.
Ich bastel seit ein paar wochen an einer eigenen Forensoftware rum. Das erstellen eines users und eintragen in die Flask session klappt problemlos. (Ja die Session existiert, hab dafür eine Status seite gebastelt).
Im Hintergrund läuft eine SQLite3 Datenbank zum Managen von Usern und Posts. (Falls euch das hilft).

Wenn ich einen Post erstelle, soll natürlich auch der Username des Users mti in die Datenbank zum Post geschrieben werden, und genau da liegt das Problem. Ich kriege es ums verrecken nicht hin den Usernamen auszulesen, hat jemand von euch ne Idee?

Code: Alles auswählen

import sqlite3
from flask import Flask, escape, request, session, render_template
import hashlib 
import os 

app = Flask(__name__)

app.secret_key = b'\x04!f\xd2\x95\xb8\xca\xa6\xb7R\x89PU\xad\xbc\xb0Z>\xde\x1b\xc6x\xa5^'


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


@app.route("/register")
def register():
    if 'username' in session:
        return "Du musst dich ausloggen um dich zu registrieren!"
    else:
        return render_template("register.html")


@app.route("/registeruser", methods=['POST', 'GET'])
def registeruser():
    name = ""
    passwd = ""
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
    if request.method == 'POST':
        name = request.form['name']
        passwd = request.form['password']
        passwdconfirm = request.form['passwordconfirm']
        if passwdconfirm != passwd:
            return "Passwörter sind nicht gleich!"
        else:
            hashobj = hashlib.sha256(passwd.encode())
            hashed_pw = hashobj.hexdigest()
            cursor.execute("INSERT INTO user (name, password) VALUES(?,?)", (name, hashed_pw ))
            conn.commit()
            conn.close()
            session['username'] = name
            return "User registriert!"
    else:
        return "Ein fehler ist aufgetreten!"


@app.route("/status")
def status():
    try:
        return "Eingeloggt als " + escape(session['username'])
    except:
        return "Du bist nicht eingeloggt!"

        
@app.route("/post")
def post():
    if 'username' not in session:
        return "Du musst dich einloggen um zu posten!"
    else:
        return render_template("newpost.html")
        
@app.route("/newpost", methods=['POST', 'GET'])
def newpost():
    if request.method == 'POST':
        posttext = request.form['post-text']
        conn = sqlite3.connect('database.db')
        cursor = conn.cursor()
        postowner = session.get('username')
        cursor.execute("INSERT INTO post VALUES (?, ?)", (posttext, postowner))
        conn.commit()
        conn.close()
        return render_template("index.html")

       
@app.route("/logout")
def logout():
    session.pop('username', None)
    return "Du hast dich ausgeloggt!"
        
    
@app.route("/latestpost")
def latestpost():
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM posts ORDER BY ROWID DESC LIMIT 1")
    result = cursor.fetchall()
    latest = result[0][0]
    conn.close()
    return render_template('latestpost.html', post = latest )


if __name__ == '__main__':
    app.run(port=1337, debug=True)  
Der Code ist nur so hingebastelt worden, also bitte keine verurteilung ^^
Wäre nett wenn mir schnell jemand helfen könnte.

~richtigerkevin
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

In `registeruser` werden leere Strings an `name` und `passwd` gebunden, aber nie benutzt. Ach ja, keine Abkürzungen, password ist nicht komplizierter aber besser lesbar. sha256 ist keine gute Methode um Passwörter zu speichern.

Was passiert denn statt dessen, wenn Du einen Post erstellen willst?
richtigerkevin
User
Beiträge: 2
Registriert: Samstag 4. Januar 2020, 21:37

Kommt drauf an wie ich meine Datenbank eingestellt hab. Stelle ich postowner auf Not Null bekomme ich eine Fehler Meldung.tue ich das nicht schreibt er den Text rein das owner Feld bleibt aber leer
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Deine Validierung ist ja auch ein bisschen duerftig. Mit 3-mal nichts eingeben ist alles erfuellt. Und eine Pruefung, ob's den User schon gibt sehe ich auch nicht. Auch das unbedingte oeffnen, aber dann nur schliessen wenn der if-Zweig durchlaufen wird ist subobtimal.

Bau mal die Validierung soweit aus, dass du prufest, ob es ueberhaupt Eingaben gab. Ggf. zeigt das dann noch andere Probleme auf.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@richtigerkevin: der Code funktioniert bei mir korrekt, wenn Du also was anderes bekommst, dann ist das nicht der Code, den Du wirklich ausführst.
Antworten