У меня есть Rails API с клиентской частью React. У меня уже давно все было в настройке приложения, и сегодня, когда я работал над этим, я внезапно начал получать ошибку:
Access to XMLHttpRequest at 'http://localhost:3000/api/v1/user/authed'
from origin 'http://localhost:8000' has been blocked by CORS policy:
The value of the 'Access-Control-Allow-Origin' header in the response
must not be the wildcard '*' when the request's credentials mode is
'include'. The credentials mode of requests initiated by the
XMLHttpRequest is controlled by the withCredentials attribute.
Теперь ни один из запросов в моем приложении не работает.
Запрос действительно проходит из приложения React в Rails API, и Rails API также отвечает должным образом (я вижу это в терминале), но на стороне клиента на самом деле ничего не происходит, потому что я предполагаю, что он заблокирован по причине CORS.
Что я могу сделать, чтобы это исправить? Может быть, какой-то пакет каким-то образом обновлен в моей системе и отличается от проекта, поэтому теперь он ломается?
URL для отправки запроса:
const ENDPOINT = '/api/v1',
PORT = 3000,
URL = window.location.protocol + '//' + window.location.hostname + ':' + PORT + ENDPOINT;
Запрос
$.ajax({
url: URL + '/' + resource,
type: verb,
data: params,
xhrFields: { withCredentials: true }
})
.done(callback)
.fail(errcallback);
Функции запроса имеют формат:
static get(resource, params, callback, errcallback) {
API.send('GET', resource, params, callback, errcallback);
}
Можете ли вы опубликовать код, который используете для запроса?
@wdm Я добавил соответствующий код со своего api.js
Вы не пробовали удалить xhrFields: { withCredentials: true }? Или установить Access-Control-Allow-Origin на localhost:8000?
Он работает при удалении xhrFields: { withCredentials: true }. Ты знаешь почему? Кроме того, если вы напишете объяснение в форме ответа, я его приму.
Вы должны добавить CORS в заголовки ответов. Пожалуйста, проверьте ссылку ниже: stackoverflow.com/questions/17858178/…
Вы должны добавить CORS в заголовки ответов. Пожалуйста, проверьте ссылку ниже: stackoverflow.com/questions/17858178/…





Если ваш API не требует учетных данных, вам следует удалить withCredentials: true.
Подробнее о withCredentials:
The XMLHttpRequest.withCredentials property is a Boolean that indicates whether or not cross-site Access-Control requests should be made using credentials such as cookies, authorization headers or TLS client certificates. Setting withCredentials has no effect on same-site requests.
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
@emaillenin Я перешел в главную ветку в репозитории, чтобы начать все заново. Удалил
Gemfile.lockиpackage.json.lockи запустилbundle installиnpm install, чтобы начать все заново, но он все еще готовится. Вот почему я не понимаю, как это решить.