2014-03-27 10 views
3

현재 UI를 구성하기 위해 Django + Django Rest Framework (DRF)와 Angularjs를 사용하여 webapp를 작성하고 있습니다.Angularjs - Safari에 인증 헤더가 추가되지 않았습니다.

모든 요청은 DRF로 빌드되는 기본 토큰 인증을 사용하여 인증됩니다. 각 앵글에서 기본 인터셉터를 구현하여 로그인 후 세션 저장소에 저장되는 토큰을 각 요청에 추가했습니다. 이것은 Chrome에서 잘 작동합니다 (인증 헤더가 관리자가 사용하는 각 요청에 실제로 추가되었음을 알 수 있습니다). 그러나 사파리에서는 헤더가 일부 요청에 추가되지 않습니다. 나에게 Safari에서 두통입니다 제공하는 특정 자원의

app.factory('authInterceptor', ['$rootScope', '$q', '$window', function($rootScope, $q, $window){ 
    return { 
     // This method adds the authentication token to each requests' header 
     request: function(config){ 
      config.headers = config.headers || {}; 

      // add authentication token in header 
      try { 
       var token = $window.sessionStorage.token; 
      } catch(err){ 
       token = undefined; 
      } 
      if(token !== undefined){ 
       config.headers.Authorization = 'Token ' + token; 
      } 
      return config; 
     }, 
     response: function(response){ 
      if(response.status === 401){ 
       // user not authenticated 
      } 
      return response || $q.when(response); 
     } 
    }; 
}]); 

하나 :

모든

첫째, 이것은 내가 사용하는 인터셉터입니다

app.factory('Coach', ['$resource', '$rootScope', 
    function($resource, $rootScope){ 
     return $resource(
      $rootScope.api_url + 'api/coaches/:coachId/?format=json', 
      { 
       coachId: '@id' 
      } 
      , 
      { 
       getByUserId: {method:'GET', url: $rootScope.api_url + 'api/coaches', isArray:false}, 
       update: {method:'PUT'} 
      } 
     ); 
}]); 

받는 withCredentials를 추가 시도하는 경우 getByUserId 메소드는 있지만 행운은 없습니다.

인터셉터가 $ httpService로 올바르게 푸시됩니다. 토큰이 sessionStorage의 Safari에서 사용 가능함을 확인했습니다. 인터셉터에서 콘솔에 토큰을 인쇄했습니다. 이 문제에 대한 내 머리를 얻을 수 없습니다.

누구나?

+0

정확히 같은 문제가 있지만 백엔드로 자바를 사용한다고 생각합니다. (http://stackoverflow.com/questions/32018621/angularjs-headers-not-added-in-my-rest-using-safari – RicardoGonzales

답변

12

마지막으로이 성가신 문제에 대한 해결책을 찾지 못했습니다. Angularjs가 url의 후행 슬래시를 제거하는 방법과 Django가 그 마법을 수행하기 위해 그 슬래시를 필요로하는 방법과 실제로 관련이 있음이 밝혀졌습니다.

Angular의 후행 슬래시가 제거 되었기 때문에 서버는 301 (영구적으로 이동 됨) 응답으로 응답했습니다. Django Rest Framework는 요청을 올바른 url로 리디렉션했습니다 (후행을 포함하여). 그러나 IE와 Safari에서 어떤 이유로 든 인증 토큰이 두 번째 요청에 전달되지 않았습니다. 그리고 당신 문제가 있습니다.

희망 사항입니다.

+0

Love 너, 바트, 너를 사랑해. –

+0

Thx Craig, 아주 좋은데. 비슷한 문제가 있었습니까? – Bart

+0

예,하지만 백본 플러그인이 있습니다. –

관련 문제