Файлы cookie, не хранящиеся в React native и Flask/Flask jwt-extended

Я использую Flask и flask-jwt-extended для аутентификации на моем сервере. Когда я использую Postman, все мои файлы cookie настроены правильно. Однако, когда я использую браузер и реагирую на него, ни один из файлов cookie не сохраняется.

Environment:
  Flask Backend: 127.0.0.1:5000
  React-Native Front: 127.0.0.1:19006

Вот моя конфигурация Flask:

    JWT_SECRET_KEY = os.getenv("JWT_SECRET_KEY", 'local-secret')
    JWT_TOKEN_LOCATION = ['cookies']
    JWT_ACCESS_TOKEN_EXPIRES = datetime.timedelta(seconds=1800)
    JWT_COOKIE_SECURE = False
    CORS_HEADERS = "Content-Type"
    JWT_REFRESH_TOKEN_EXPIRES = datetime.timedelta(days=15)
    JWT_COOKIE_CSRF_PROTECT = True  # set_refresh_cookies() will now also set the non-httponly CSRF cookies
    JWT_CSRF_CHECK_FORM = True
    JWT_ACCESS_CSRF_HEADER_NAME = "X-CSRF-TOKEN-ACCESS"
    JWT_REFRESH_CSRF_HEADER_NAME = "X-CSRF-TOKEN-REFRESH"
    SSL_REDIRECT = False
jwt = JWTManager()
app = Flask(__name__)
app.config.from_object(APP_CONFIG[CONFIG_ENV])
cors = CORS(app, resources={r"/*": {"origins": "http://127.0.0.1:19006"}}, supports_credentials=True)
APP_CONFIG[CONFIG_ENV].init_app(app)
jwt.init_app(app)

Вот как я храню файлы cookie (классические и работающие с почтальоном):

access_token = create_access_token(identity = token_identity)
refresh_token = create_refresh_token(identity = token_identity)
resp = jsonify({"access_token": access_token, "refresh_token": refresh_token})
set_access_cookies(resp, access_token)
set_refresh_cookies(resp, refresh_token)

Однако всякий раз, когда я использую браузер (127.0.0.1:19006) с реакцией на запросы, файлы cookie никогда не сохраняются.

Есть идеи, откуда может возникнуть проблема?


person Abilys38    schedule 16.08.2020    source источник


Ответы (2)


После многих часов борьбы решение оказалось проще, чем я думал: во фронтальный код (react-native) мне пришлось добавить:

credentials: "include"

в моих запросах на выборку.

См.: https://developers.google.com/web/updates/2015/03/introduction-to-fetch

person Abilys38    schedule 16.08.2020

Вероятно, вы сталкиваетесь с механизмом безопасности веб-браузера, называемым политикой одного и того же источника, где он обрабатывает эти два URL-адреса и два разных домена и, следовательно, не сохраняет файлы cookie. Вы можете использовать прокси-сервер webpack/apache/nginx для обслуживания API и внешнего интерфейса из одного домена или, возможно, изучить настройку CORS, чтобы эта настройка работала.

person vimalloc    schedule 16.08.2020
comment
Спасибо за Ваш ответ. Что вы подразумеваете под настройкой CORS? Что я могу изменить? Сначала я бы предпочел сделать это, поскольку я все еще в разработке. - person Abilys38; 17.08.2020