2017-03-24 3 views
0

http 요청에 CSRF 및 토큰 데이터를 보내려면 어떻게해야합니까?각 http.post 헤더 문제

저는 Angular를 사용하여 json 데이터를 Drupal 서비스 엔드 포인트에 게시하고 있지만 문제가 있습니다. 나는이 노드에 대한 드루팔 서비스 엔드 포인트에 게시하기 위해 노력하고있어 위의 코드를 사용하여

// drupal post node 
$scope.post_node = function(){ 
      console.info('Node post ...'); 

      var promise = $http.post('http://mysite/QuestionsGenerator/angularjs-headless/api/v1/node', 
       { 
        "title" : "Node Test", 
        "body" : "Node body contents test#2", 
        "type" : "page" 
       }, 
       { 
        'Content-type' : 'application/json', 
        'Accept' : 'application/json', 
        'X-CSRF-Token' : $cookieStore.get('user_session_token'), 
        'Cookie' : $cookieStore.get('user_session_cookie') 
       } 
      ) 
      .then(
       //   successCallback, 
       function(response){ 
        console.log('Post-node working ...'); 
        $log.info(response); 
       }, 
       //   errorCallback 
       function(response){ 
        console.log('Post-node NOT working ...'); 
        $log.error(response); 
       } 
      ); 

      return promise; 
     } 

    }]); 

생성하는 - 그래서 나는이에 대한 제목, 노드 유형를 게시해야 새로운 노드.

은 또한, 나는 X-CSRF 토큰쿠키를 노드가 성공적으로 생성 할 수 있도록 드루팔 내 각도 사용자를 인증 정보를 게시해야합니다.

는 그러나, 나는 다음과 같은 오류가 나타납니다. 사용자가 로그인하지 않은라는 메시지가 다음 Refused to set unsafe header "Cookie" - 나는뿐만 아니라 존재하는 사용자를 확인할 수 있지만에 기록됩니다

내 네트워크 탭의 더 세부 사항을 보여줍니다 내 토큰 또는 쿠키 세부 정보가 전송되기 시작합니다. 이는 사용자가 인증을 시작하지 않는다고 설명합니다.

내 쿠키 및 토큰 데이터를 보내는 방법을 이해하는 사람이 있습니까?

UPDATE

각도 모든 일에 내 전체 newbness 변명하지만 아래의 코드와 같이 withcredentials에게 라인을 추가하는 시도하십시오 : 그러나, 나는 다음과 같은 오류가

var headlessQS = angular.module('headlessQS', ['ngRoute', 'ngCookies']); 

headlessQS.config(function($routeProvider, $httpProvider){ 
    $routeProvider 

     $httpProvider.defaults.withCredentials = true 

    .when('/', { 
     templateUrl: 'pages/main.html', 
     controller: 'mainController' 
    }) 

    .when('/wiris', { 
     templateUrl: 'pages/wiris.html', 
     controller: 'wirisController' 
    }) 

    .when('/signin', { 
     templateUrl: 'pages/signin.html', 
     controller: 'signinController' 
    }) 
}); 

// Controllers 

...... 

:

Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.3.0-rc.2/$injector/modulerr?p0=headlessQS&p1=… 

또한 신탁 코드가 작동하면, 내 토큰 등을 추가하려면 다음 코드에서와 같이 데이터 :

var promise = $http.post('http://mysite/QuestionsGenerator/angularjs-headless/api/v1/node', 
    { 
     "title" : "Node Test", 
     "body" : "Node body contents test#2", 
     "type" : "page" 
    }, 
    {  
     headers: { 
      'Content-type' : 'application/json', 
      'Accept' : 'application/json', 
      'X-CSRF-Token' : $cookieStore.get('user_session_token'), 
      'Cookie' : $cookieStore.get('user_session_cookie') 
     } 
    } 
) 
.then(
    //   successCallback 

답변

0

당신이 $cookies를 사용하고, 당신이 설정 한 경우 :

$httpProvider.defaults.withCredentials = true; // from main module 

을 다음 쿠키가 모든 요청에 ​​전송해야합니다.

기본적으로 $httpXSRF-TOKEN 쿠키의 토큰을 읽고 X-XSRF-TOKEN 헤더를 요청에 적용합니다.

당신이 Authorization 헤더에 무기명 토큰으로 JWT 토큰을 전송하려는 경우, HTTP 인터셉터를 사용하여 조사 :

// register the interceptor as a service 
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { 
    return { 
    'request': function(config) { 
     var access_token = tokenService.getAccessToken(); 
      if (access_token) { 
       if (config.url.indexOf(this.myAPIUrl) === 0) { 
        config.headers.Authorization = 'Bearer ' + access_token; 
       } 
      } 
     return config; 
    } 
    }; 
}); 

$httpProvider.interceptors.push('myHttpInterceptor'); 

참고 : 모든를 캡처 할 HTTP 인터셉터를 사용하여 HTTP 응답 및 HTTP 요청 및 응답의 오류가 있습니다.

+0

답장을 보내 주셔서 감사합니다. 내 초라함을 용서해 주시길 바랍니다.하지만 내 제안에 귀하의 제안을 통합하는 방법이나 방법을 모릅니다. 저를 믿으십시오, 나는 이제까지 시도하고 성공하지 못했다. 내 방향을 제시해 줄 수 있니? – sisko

+0

기본 AngularJS 파일 (대부분 app.js)에'.config' 블록으로'$ httpProvider' 기본값을 구현할 수 있어야합니다. –

+0

나는 그 방법을 성공없이 시도했다. 원래 질문에 대한 업데이트를 추가하여 내가 의미하는 바를 확인했습니다. 지속적인 도움에 감사드립니다. – sisko