2016-01-28 1 views
0

Я создал приложение, которое осуществляет доступ к данным из mongo/node + express, которое находится в другом домене (например, имя_домена).Проблема CORS для Ionic + express

Код функции получает:

var request = $http({ 
      method: 'GET', 
      url: 'https://domain_name.users.io/categories/list', 
      withCredentials: true /* to get the Cookie value generated at server-side */ 
     }); 

В экспрессе стороны добавил следующий код для того, чтобы избежать проблем CORS:

res.header("Access-Control-Allow-Origin", "*"); 
res.header("Access-Control-Allow-Methods","GET,PUT,POST,DELETE,OPTIONS"); 
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
res.header("Access-Control-Allow-Credentials", "true"); 

Для выше, я получаю следующее сообщение об ошибке:

XMLHttpRequest cannot load https://domain_name.users.io/data/list. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:8100' is therefore not allowed access. 

Я проверил API «https://domain_name.users.io/data/list» и есть п o выпускать с ним, так как я могу видеть данные (при попадании в браузер).

Может кто-то пожалуйста, помогите мне же

+0

У вас есть доступ к https://domain_name.users.io/categories/list через localhost? если вы это сделаете, я думаю, вы можете использовать httpclient для доступа к https://domain_name.users.io/categories/list –

ответ

0

Помимо * слишком разрешительный и победит использование учетных данных. Поэтому используйте https://domain_name.users.io/data/list вместо того, чтобы использовать *.

Вы не можете сделать так, как *, потому что это часть безопасности, и если вы хотите разрешить учетные данные, то ваш Access-Control-Allow-Origin не должен использовать *.

Подробнее читайте here.

+0

Изменен 'res.header (« Access-Control-Allow-Origin »,« * »); 'to' res.header («Access-Control-Allow-Origin», «https://domain_name.users.io») 'Теперь получаем эту ошибку' 'XMLHttpRequest не может загрузить https://domain_name.users.io/data /список. Заголовок «Access-Control-Allow-Origin» содержит несколько значений «https://domain_name.users.io, *», но разрешено только одно. Origin 'http: // localhost: 8100', следовательно, не разрешен доступ. ' –

+0

Моя ошибка, я думаю, что localhost - это dev-версия, а domain.com - сервер API. Поэтому вы хотите настроить заголовок Access-Control-Allow-Origin на http: // localhost: только 8100, никаких других добавленных значений. –

+0

Спасибо, что сработало :) .. но что, если я хочу получить доступ к тому же с мобильного? Если я создаю файл .apk и установил его на мобильный, я думаю, что это не так. Правильно ? Так что же было бы для этого решением? –

0

Необходимо установить заголовки:

var request = $http({ 
      method: 'GET', 
      url: 'https://domain_name.users.io/categories/list', 
      headers:{'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, 
      withCredentials: true /* to get the Cookie value generated at server-side */ 
     }); 

============== на узле боковой ===============

app.use(function(req, res, next) { 
res.setHeader('Access-Control-Allow-Origin', '*'); 
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); 
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers'); 
next(); 
}); 
+0

Добавлены заголовки. По-прежнему возникает такая же ошибка. –

+0

@rohan kangale: я отредактировал свой ответ ...... – Karan