2017-03-24 4 views
0

httpリクエストでCSRFとトークンのデータを送信するにはどうすればよいですか?Angular http.postヘッダーの問題

私は、Drupalサービスエンドポイントにjsonデータを投稿するためにAngularを使用していますが、問題が発生しています。

上記のコードを使用して
// 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; 
     } 

    }]); 

、私が作成するノードのためのDrupalのサービスのエンドポイントに投稿しようとしている - 私はのためにタイトルノードタイプにを掲示しなければなりません新しいノード。また

、私はX-CSRFトークンクッキーノードが正常に作成できるようにDrupalのと私のアンギュラユーザーを認証する情報を掲示しなければなりません。

しかし、私は次のエラーが表示されます。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のInterceptorを使用することができますHTTP HTTP要求と応答のエラー、応答、およびエラー。

+0

あなたのお返事ありがとうございます。私の新人感を赦し​​てください。しかし、どこにどのようにあなたの提案を自分のコードに統合するのか分かりません。私を信じて、私は試したが成功しなかった、これまでのところ。私の方向を提示できますか? – sisko

+0

メインのAngularJSファイル(おそらくapp.js)に '.config'ブロックで' $ httpProvider'のデフォルトを実装することができます。 –

+0

私はそのアプローチを成功せずに試みました。私は元の質問に更新を加えて、あなたが私の言いたいことを見ています。あなたの継続的な助けをありがとう – sisko

関連する問題