Почему мой сеанс ['username'] всегда является последней записью в моей базе данных, а не текущей в flask? - PullRequest
0 голосов
/ 04 февраля 2020

Я получил простейшую базу данных:

class users(db.Model):
    _id = db.Column("id", db.Integer, primary_key=True)
    username = db.Column('username', db.String(100))
    password = db.Column('password', db.String(100))

Вот мои функции входа в систему, регистрации, пользователя и выхода из системы:

@app.route('/login', methods=['POST', 'GET'])
def login():
    error = None
    if request.method == "POST":
        username = request.form['username']
        password = request.form['password']
        found_user = users.query.filter_by(username=username).first()
        found_pass = users.query.filter_by(password=password).first()
        if found_user and found_pass:
            session['logged_in'] = True
            flash("You've just logged in!")
            return redirect(url_for('user'))
        else:
            error = 'Invalid Data. Please try again.'
    return render_template('login.html', error=error)


@app.route('/register', methods=['POST', 'GET'])
def register():
    if request.method == "POST":
        username = request.form['username']
        password = request.form['password']
        session['username'] = username
        session['password'] = password
        found_user = users.query.filter_by(username=username).first()
        if found_user:
            flash("User already registered!")
        elif not request.form['username'] or not request.form['password']:
            flash("Enter valid data!")
        else:
            usr = users(username, password)
            db.session.add(usr)
            db.session.commit()
            flash("User registered!")
    return render_template('register.html')


@app.route('/user')
@login_required
def user():
    if session.get('logged_in'):
        return render_template('user.html')
    else:
        return redirect(url_for('login'))


@app.route('/logout')
@login_required
def logout():
    session.pop('logged_in', None)
    flash("You've just logged out!")
    return redirect(url_for('login'))

Мне нужно получить текущий сеанс ['username' ], чтобы отобразить его в шаблоне html, но каждый раз, когда я вызываю его и передаю аргумент html через пользовательскую функцию, например:

@app.route('/user')
@login_required
def user():
    user = session['username']
    if session.get('logged_in'):
        return render_template('user.html', user=user)
    else:
        return redirect(url_for('login'))

возвращает последнюю запись в базе данных имени пользователя Я зарегистрировался вместо того, который в настоящее время вошел в систему, кто-то может объяснить, почему это происходит?

1 Ответ

0 голосов
/ 04 февраля 2020

В вашем логине () установите сеанс ['Имя пользователя'] = имя пользователя при успешном входе в систему

@app.route('/login', methods=['POST', 'GET'])
def login():
    error = None
    if request.method == "POST":
        username = request.form['username']
        password = request.form['password']
        found_user = users.query.filter_by(username=username).first()
        found_pass = users.query.filter_by(password=password).first()
        if found_user and found_pass:
            session['logged_in'] = True
            session['Username']=username
            flash("You've just logged in!")
            return redirect(url_for('user'))
        else:
            error = 'Invalid Data. Please try again.'
    return render_template('login.html', error=error)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...