#ruby-on-rails #vue.js #vue-resource
#ruby-on-rails #vue.js #vue-ресурс
Вопрос:
Я знаю, что есть несколько похожих путей, но ни одно решение мне не помогло.
Я создаю приложение с Ruby on Rails и Vue. В настоящее время я пытаюсь получить токен доступа Spotify моего пользователя. Итак, мне просто нужно создать get-запрос и дождаться ответа.
Он отлично работает из представления, созданного с помощью Rails, но не из моего приложения Vue.
Это ошибка в моей консоли:
Access to XMLHttpRequest at 'https://accounts.spotify.com/authorize?client_id=261c008xxxxxx52da843b8096damp;redirect_uri=http://localhost:3000/auth/spotify/callbackamp;response_type=codeamp;scope=playlist-modify-public user-read-emailamp;state=5987fec3952e0c46332183c526d0abef2f0d35a13e39694e' (redirected from 'http://localhost:3000/auth/spotify') from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
В запрошенном ресурсе отсутствует заголовок ‘Access-Control-Allow-Origin’. но если мы проверим заголовки:
Vue.http.interceptors.push(function (request, next) {
request.headers.set('Content-Type', 'application/json');
request.headers.set('Access-Control-Allow-Origin', '*');
request.headers.set('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
request.headers.set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
request.headers.set('X-CSRF-Token', document.getElementsByName('csrf-token')[0].content);
next();
});
Я не знаю, где искать, у вас есть идея?
Я уже пытался установить расширение chrome, разрешить все origins на стороне моего сервера, заменить Vue-ресурс на Axios, установить cors с помощью node…
Комментарии:
1. Почему вы выполняете вызов XHR?
Ответ №1:
Access-Control-Allow-Origin
должен быть заголовок ответа, а не заголовок запроса. Его должен установить ваш внутренний API.
Комментарии:
1. Привет @Flame, спасибо за твой ответ. Я использую API Spotify, и он работает с Ruby, но не с Vue, вот почему я не понимаю, в чем проблема
2. заголовок allow-origin используется браузерами, чтобы указать, какие источники могут получить доступ к ресурсу (т. Е. к каким доменам). Когда вы делаете запрос из Ruby, это делается на стороне сервера, и он не исходит из домена, поэтому он работает. В Javascript заголовок проверяется браузером, и запрос может быть заблокирован