В запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Источник 'localhost:8080', следовательно, не имеет доступа
Я видел эту проблему несколько раз на форуме, но работа с этими решениями не помогла.
Я создаю стековое приложение MEAN с использованием PassportJS, чтобы разрешить вход через Twitter.
angular.module('HomeCtrl', []).controller('HomeController', function($scope,$http) {
$scope.tagline = 'To the moon and back!';
$scope.twit = function() {
console.log("twitter button clicked");
$http.get("/auth/twitter")
.success(function (data) {
console.log(data);
})
//$window.location.href = '/auth/twitter';
}});
Мой route.js на сервере имеет
app.get('/auth/twitter', passport.authenticate('twitter', { scope : 'email' }));
Теперь, когда твиттер перенаправляет в приложение, редирект сервера не работает из-за проблемы с CORS, которую я могу понять. Чтобы исправить это
Я пытался следовать
app.all('/*', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:8080");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
next();
});
но все равно это не работает. После прочтения в Интернете я понял, что твиттер не отправляет источник заголовка, и поскольку он перенаправляет сервер так, что node.js не имеет контроля над полученным ответом, который может быть отправлен обратно в браузер.
На данном этапе я не уверен, как поступить. пожалуйста, порекомендуйте
Согласно комментарию: вот ответ твиттера
Request URL:https://api.twitter.com/oauth/authenticate?oauth_token=l8OKcAvqr3QLrlCroweGgByvvhXfSmIiqhvRgGqML6c
Request Headers
Provisional headers are shown
Accept:application/json, text/plain, */*
Origin:http://localhost:8080
Referer:http://localhost:8080/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Query String Parametersview sourceview URL encoded
oauth_token:l8OKcAvqr3QLrlCroweGgByvvhXfSmIiqhvRgGqML6c
1 ответ
Проблема здесь в том, что твиттер не устанавливает заголовки CORS (не ваш собственный сервер узла). Вы не можете обойти это. Так что вы можете использовать простые чернила <a href="/auth/twitter"></a>
вместо $http.get или $window.location.href
, Просто помните, что в этом случае ваши http-перехватчики не будут применены, поэтому вам, возможно, придется вместо этого передать некоторые параметры запроса.