Обратите внимание: таких вопросов много, но ни один из них не помог мне, поэтому я и задаю это.
Мой REST API - это приложение Flask.Моя /login
конечная точка использует JWT и устанавливает токены доступа и обновления в файлах cookie клиента.
Я использую Flask на 127.0.0.1:5000
, а внешний интерфейс на 127.0.0.1:8080
.
Код сервера
@auth.api(
http_path='/login',
http_method='POST',
)
def login(email, password):
# ...
access_token = create_access_token(identity=user.id, fresh=True, expires_delta=app.config['JWT_ACCESS_TOKEN_EXP'])
refresh_token = create_refresh_token(identity=user.id, expires_delta=app.config['JWT_REFRESH_TOKEN_EXP'])
resp = jsonify({'login': True})
set_access_cookies(resp, access_token)
set_refresh_cookies(resp, refresh_token)
# ...
return resp
В моем приложении включена функция CORS:
from flask_cors import CORS
# ...
cors = CORS()
def create_app():
app = Flask(__name__)
# ...
cors.init_app(app)
# ...
return app
Код клиента
$.ajax({
method: "POST",
url: "http://127.0.0.1:5000/login",
data: JSON.stringify({email: 'myemail', password: 'mypassword'}),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data) {
console.log('logged in!');
}
});
Проблема
Файлы cookie не устанавливаются в FirefoxХром ни Edge.Однако я могу видеть файлы cookie в заголовках ответа при использовании инструментов разработчика браузера, но в разделе «Хранение» в разделе «Файлы cookie» ничего не отображается.
Iперепробовал несколько вещей:
- настройка
cors=CORS(supports_credentials=True)
на бэкэнде и установка xhrFields:{ withCredentials: true}
на интерфейсе. - настройка
crossDomain: true
на интерфейсе - выполнениеУбедитесь, что файлы cookie не блокируются настройками браузера
- , работающими специально для
127.0.0.1
вместо localhost
Нужен ли какой-нибудь прокси для внешнего интерфейса?Должно быть более простое решение.