He buscado soluciones en todas partes pero no pude resolver mi problema. Actualmente estoy ejecutando una aplicación Flask con uWSGI y NGINX en AWS.
La aplicación de mi matraz se ejecuta localmente 127.0.0.1:5000 . Intenté agregar secret_key como se menciona en diferentes preguntas, pero no funcionó.
Aquí hay algo de mi código:
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') Siempre me redirigen a la página predeterminada ya que la session no almacenó el valor 'is_logged_in'. Pero almacenó { permanent: True } que creo que es de la línea session.permanent = True .
Configuración en 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; } Si ayuda, mi uWSGI se ejecuta en socket = 120.0.0.1:5000 y estoy usando protocol = http .
Y cuando revisé las cookies de la aplicación en el navegador, tiene registrada una cookie de session .
Intente usar if session['is_logged_in'] == False
Y establezca que la sesión se registra como falsa al principio. En la parte superior después de la Session(app) agregue esta session['is_logged_in'] = False
Editar:
Verifica si 'logged_in' está presente en la sesión. Al iniciar sesión haz esto:
if 'logged_in' in session: #User logged inAl cerrar la sesión haz esto
session.pop('logged_in')Después de una tediosa investigación, resultó que solo necesitaba incluir plugin = python36 en mi uwsgi.ini, que es de uwsgi-plugin-python36 (rpm).
Noté una falta de persistencia de sesión en mi flujo de OAuth 2.0. La configuración SAMESITE ="Strict" era lo que lo estaba causando. En uno de los pasos, el proveedor de identidad no pudo configurar la cookie y responder con la misma identificación de sesión. Esto condujo a la creación de una nueva sesión al final del flujo de autenticación; por lo tanto, no se estaba realizando ninguna autenticación.
Establecer SAMESITE en "Lax" resolvió mi problema.