Объект сессии во Flask обнуляется при запросе с ReactJS, но не ведет себя так при запросах из Postman

На сервере имеется такой конфиг:

from uuid import uuid4
import redis
from datetime import timedelta


class AppConfig:
    JWT_SECERT_KEY = uuid4().hex
    SECRET_KEY = uuid4().hex
    SESSION_TYPE = 'redis'
    SESSION_PERMANENT = False
    PERMANENT_SESSION_LIFETIME = timedelta(hours=12)
    SESSION_USE_SIGNER = True
    SESSION_REDIS = redis.from_url("redis://127.0.0.1:6379")

Функция, работающая после запроса, которая печатает содержимое объекта session

@app.after_request
def close_connect(resp):
    print(session)
    my_db.close_connection()
    print(f"Connection is closed, response is {resp}", end='\n\n')
    return resp

И такая роут для логина, где my_db - это экземпляр пользовательского класса для связи с PostgresSQL:

from flask import Flask, request, jsonify, session
from flask_jwt_extended import create_access_token

@app.route('/login', methods=['POST'])
def login_user():
    data = json.loads(request.data)
    email, password = data['email'], data['password']
    user = my_db.get_user_by_email(email)
    if not user:
        return jsonify({
            'Error': 'User do not exists',
        }), 401
    if check_password_hash(user.password, password):
        res = {
            'id': user.id,
            'email': user.email
        }
        if str(user.id) not in session:
            token = create_access_token(res)
            session[str(user.id)] = uuid4().hex
            return jsonify(access_token=token), 200
        return jsonify({'error': 'Already authorized'})
    return jsonify({
        'Error': 'Wrong password or email',
    }), 401

Если передать через Postman двумя последовательными запросами на .../login такие JSON'ы:

{
    "email": "[email protected]",
    "password": "123123"
}

{
    "email": "[email protected]",
    "password": "123123"
}

то в итоге в консоли будет:

<RedisSession {'4': 'bdbecc331fdc43da9a026e9a2ee70ed0', '1': '0f6b65a2ef7d489abe3a1df8352d2c38'}>
Connection is closed, response is <Response 315 bytes [200 OK]>

т.е оба ключа были добавлены в session и это видно. Если же сразу после этого послать такой запрос с ReactJS, где url - http://127.0.0.1:5000/login, а data - JS-объект {email: '[email protected]', password: '123123'}:

const sendData = async (url, data) => {       
        const response = await fetch(url, {
            method: 'POST',
            body: JSON.stringify(data)
        })
        let res = await response.json();

то в консоли видно, что сессия отчистилась, и в ней есть только те значения, которые пришли от JS:

<RedisSession {'1': '911c73e7fd5b4d02a7a836e38f388837'}>
Connection is closed, response is <Response 315 bytes [200 OK]>

В чем моя ошибка и кто виноват в таком поведении? P.S все пары почт и паролей присутствуют в БД.


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