Flask значения сеанса не сохраняются при разных запросах - PullRequest
0 голосов
/ 19 апреля 2020

Я искал решения везде, но не смог решить свою проблему. В настоящее время я запускаю приложение Flask с uWSGI и NGINX в AWS.

Мое flask приложение работает локально 127.0.0.1:5000. Я попытался добавить secret_key, как указано в разных вопросах, но это не сработало.

Вот мой код:

app.py

from flask import Flask, request, redirect, url_for, session, abort
from flask_session import Session

app = Flask(__name__)
app.config["SESSION_TYPE"] = 'filesystem'
app.config["SESSION_FILE_DIR"] = '/var/www/test/session'

Session(app)

@app.route('/auth/login', methods=['POST'], strict_slashes=False)
def login():
    # did some validations here
    session.permanent = True
    session['is_logged_in'] = True
    return redirect(url_for('home'))

@app.route('/auth/home', methods=['GET'], strict_slashes=False)
def home():
    if session.get('is_logged_in') == None:
        return redirect('/') # will return to default page
    return render_template('home.html')

if __name__ == '__main__':
    app.run(host='0.0.0.0')

Меня всегда перенаправляют на страницу по умолчанию, поскольку session не хранит значение is_logged_in. Но он сохранил { permanent: True }, который, я полагаю, взят из строки session.permanent = True.

Конфигурация в nginx .conf :

location /auth {
    rewrite ^/(.+) $1 break;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off:
    proxy_pass http://127.0.0.1:5000/$1$is_args$args;
}

Если это поможет , мой uWSGI работает в socket = 120.0.0.1:5000, и я использую protocol = http.

. И когда я проверял файлы cookie приложения в браузере, он зарегистрировал session cook ie.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

После некоторого утомительного исследования выяснилось, что мне просто нужно было включить plugin = python36 в мой uwsgi.ini от uwsgi-plugin-python36 (об / мин).

0 голосов
/ 19 апреля 2020

Попробуйте использовать if session['is_logged_in'] == False

И установить сессию во время запуска как ложную. Вверху после Session(app) добавьте это session['is_logged_in'] = False

Редактировать:

Вы проверяете, присутствует ли 'logged_in' в сеансе. При входе в систему сделать это:

if 'logged_in' in session:
    #User logged in 

При выходе из системы сделать это

session.pop('logged_in')
...