flask: logout пользователя python

Как сделать правильный выход из аккаунта пользователя? Код для входа в аккаунт работает, но я должен каждый раз вводить логин и пароль, чтобы войти в свой профиль. как сделать так, чтобы при открытии сайта я уже был на своем аккаунте, и реализовать выход?

Вот код:

@app.route('/', methods=['GET', 'POST'])
def login():
    if request.method == 'GET' and 'loggedin' in session:
        return redirect(url_for('profile'))

    elif request.method == 'POST':
        email = request.form['email']
        password = request.form['password']

        cur = mysql.connection.cursor()
        cur.execute('SELECT * FROM users.data WHERE email = %s AND password = %s',
                    (email, password))
        account = cur.fetchone()
        if account:
            session['loggedin'] = True
            session['id'] = account[0]
            session['firstname'] = account[1]
            session['email'] = account[3]
            return redirect(url_for('profile'))
        else:
            return render_template('error.html')

    return render_template('login.html')

#profile метод

@app.route('/profile', methods=['GET'])
def profile():
    if request.method == 'GET' and 'loggedin' in session:
        cur = mysql.connection.cursor()
        cur.execute("SELECT firstname, lastname, email FROM users.data WHERE description = 'description'")
        account = cur.fetchall()
        description = account
        return render_template('profile.html', id=session['id'], firstname=session['firstname],email=session['email'], description=description)

#logout метод

@app.route('/logout')
def logout():
    if session.pop('email', None):
        print('Logout successfully!')
        return redirect(url_for('login'))

profile.html

<h2 class="white-text">Welcome, {{ firstname }}</h2>

{% if session.email %}
<button class="btn btn-primary">
  <a href="{{ url_for('logout') }}">
      Logout
  </a>
</button>
{% endif %}

Когда я нажимаю на logout, то получаю ошибку KeyError: 'firstname'. В чем ошибка?


Ответы (0 шт):