2014-12-21 1 views
3

У меня есть интересная проблема, возникающая в моем приложении angularjs. Когда я вхожу в систему, все запросы шаблонов в угловом исполнении, которые были сделаны на Amazon S3, перестают работать и возвращают 400 Bad Request. Они полностью работают, прежде чем вы входите в систему. Единственное, что должно измениться при входе в систему, - это маркер json, который отправляется в заголовках, чтобы проверить, что кто-то зарегистрировался. Мои мысли, возможно, перехватчик, который отправляет jwt в заголовках, каким-то образом затрагивает CORS на Amazon S3. Кажется странным.Angularjs с использованием JWT перерывов CORS для Amazon S3 при входе в систему

Вот код перехватчика:

.factory('TokenInterceptor', function ($q, $window) { 
    return { 
     request: function (config) { 
      config.headers = config.headers || {}; 
      if ($window.sessionStorage.token) { 
       config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token; 
      } 
      return config; 
     }, 

     response: function (response) { 
      return response || $q.when(response); 
     } 
    }; 
}); 

EDIT: Это дает мне ошибку Access Origin, но я изменил мой файл CORS на Амазонке, и это, казалось, изменить к ошибке 400 в настоящее время. Мой CORS файл выглядит следующим образом:

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

EDIT: В том числе образец ответа при попытке получить доступ к файлу после входа в систему:

Remote Address:1.2.3.4:443 
Request URL:https://s3.amazonaws.com/bucket/path/to/file/template.html 
Request Method:GET 
Status Code:400 Bad Request 
Request Headersview source 
Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-GB,en;q=0.8,en-US;q=0.6,fr;q=0.4,es;q=0.2 
Authorization:Bearer xxxXXXxxxXXXxxXXxxxXXXXxxXXxx 
Connection:keep-alive 
Host:s3.amazonaws.com 
Origin:http://domain.com 
Referer:http://domain.com/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)  Chrome/39.0.2171.95 Safari/537.36 
Response Headersview source 
Access-Control-Allow-Methods:GET 
Access-Control-Allow-Origin:* 
Access-Control-Max-Age:3000 
Connection:close 
Content-Type:application/xml 
Date:Sun, 21 Dec 2014 01:49:16 GMT 
Server:AmazonS3 
Transfer-Encoding:chunked 
Vary:Origin, Access-Control-Request-Headers, Access-Control-Request-Method 
x-amz-id-2:xxxXXXxxxXXXxx 
x-amz-request-id:xxxXXXxxxXXxxxXXXxx 
+0

изменен * на Авторизация

+0

@pankajparkar: Я пробовал это, но это не решило проблему. – codephobia

ответ

1

Вам нужно добавить transformRequest к HTTP POST удалить Авторизация заголовок для этого конкретного запроса.

   transformRequest: function (data, headersGetter) { 
       //Headers change here 
       var headers = headersGetter(); 
       delete headers['Authorization']; 
       return data; 
       }, 

Получена такая же проблема при загрузке в Amazon S3 той же проблемы, поэтому я добавил это, и это сработало.

2

Только для записи. У меня также была такая же проблема (или очень похожее: нет файлов, которые будут найдены после того, как я зарегистрировался в своем приложении AngularJS), и после долгих разрывов по проблеме я обнаружил, в чем проблема.

В моем конкретном случае это ничто не было связано с S3 или CORS, но на самом деле куки (и я все еще не совсем уверен, как это вызвало проблему с поиском файлов, но это так). Как я видел в своем приложении, я резко увеличил информацию, хранящуюся у моего пользователя после того, как я сделал логин, и он превысил ограничение на 4 кбайка для файлов cookie, и по какой-то причине он разбил весь мой сайт.

Я проверяю возможность изменения с файлов cookie на localStorage, но это еще одна история. главное, что после того, как я уменьшу количество информации, хранящейся в файле cookie, он начал работать так, как предполагалось.

Смежные вопросы