Узнал, почему сессии не работали после большого количества исследований!Сеансы Flask - это, по сути, файлы cookie, и я использовал Fetch API для выполнения операций CORS.Fetch () по умолчанию не позволяет принимать или отправлять файлы cookie, и их необходимо настроить для использования сеансов Flask.
В моем клиенте React.js я сделал это, установив «include» для «учетных данных»':
fetch(url, {
method: 'POST',
mode: 'cors',
body: JSON.stringify(loginObj),
credentials: 'include',
headers: {
'Content-Type': 'application/json'
}
})
.then(res => res.json())
...
Из-за этой конфигурации запрос не считается «простым запросом», и клиент фактически «предварительно отправляет» запрос POST запросом OPTIONS.Это означает, что перед отправкой моего запроса POST тестирование OPTIONS для проверки наличия у сервера правильного доступа будет сначала отправлено на мой Flask-сервер.
Предварительный запрос OPTIONS будет проверять, получен ли ответ отсервер имеет правильные заголовки, содержащие «Access-Control-Allow-Origin», «Access-Control-Allow-Credentials» и «Access-Control-Allow-Headers».Если тест, отправленный запросом OPTIONS, не пройден, фактический запрос POST не будет отправлен, и вы получите ошибку Fetch.
Затем я соответствующим образом устанавливаю заголовки на моем сервере Flask следующим образом:
@bp.route('/login', methods=('POST','OPTIONS'))
def login():
if request.method == 'OPTIONS':
resp = Response()
resp.headers['Access-Control-Allow-Origin'] = clientUrl
resp.headers['Access-Control-Allow-Credentials'] = 'true'
resp.headers['Access-Control-Allow-Headers'] = "Content-Type"
return resp
else:
'''
use session for something
'''
res['actionSuccess'] = False
js = json.dumps(res)
resp = Response(js, status=200, mimetype='application/json')
resp.headers['Access-Control-Allow-Origin'] = clientUrl
resp.headers['Access-Control-Allow-Credentials'] = 'true'
resp.headers['Access-Control-Allow-Headers'] = "Content-Type"
return resp
Обратите внимание, что для Access-Control-Allow-Credentials было установлено значение true, в отличие от логического значения Python True, поскольку клиент не будет распознавать логическое значение Python.
И с этим, объект сеанса Flask должен храниться в ваших файлах cookie.