Rails API ActiveStorage S3 CORS проблема - PullRequest
0 голосов
/ 22 апреля 2020

У меня возникла проблема с CORS при попытке запросить данные файла ActiveStorage из моего интерфейса React, в мой Rails API, используя S3 в качестве поставщика хранилища.

Что я использую:
- Rails в режиме API
- ActiveStorage
- Реакция (используя Ax ios для запросов)
- S3

Загрузка файлов работает нормально, благодаря библиотеке ReactActiveStorageProvider.
Загрузка файлов работает нормально локально, когда я использую диск для хранения, но в «производственных» случаях, когда мы используем S3, всегда происходит сбой с ошибкой CORS Access-Control-Allow-Origin.

По сути, в моем сериализаторе я включаю URL-адрес файла, используя помощник rails_blob_url для каждого элемента, а затем, когда пользователь выбирает для загрузки указанный c, клиент делает запрос на этот URL-адрес. для данных файла. Не уверен, что это правильная или даже хорошая реализация, но я мало что могу найти о ActiveStorage в режиме API.

Запрос URL-адреса Rails для данных файла, кажется, работает нормально, возвращает правильные заголовки ответа и т. Д. c. но затем перенаправление на S3 имеет минимальные заголовки запросов и ответов, например, ActiveStorage их не перенаправляет или что-то в этом роде.

Примечание. У меня настроена конфигурация CORS для S3-контейнера, и она, кажется, работает нормально и возвращает правильные заголовки, когда я скручиваю его с опциями

РЕДАКТИРОВАТЬ: Вот моя конфигурация CORS для корзины S3:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>http://subdomain.domain.com*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

И мой код ответа на запрос Rails ActiveStorage - 302 найдено, поэтому перенаправление и затем второй запрос от перенаправления непосредственно на S3, кажется, даже не имеет кода ответа, как я сказал, что есть минимальные заголовки, нет источника, нет статуса, нет метода запроса.

...