Wie sende ich CSRF- und Token-Daten in einer HTTP-Anfrage?Angular http.post-Header Ausgabe
Ich verwende Angular, um Json-Daten an einen Drupal-Dienstendpunkt zu senden, aber ich habe Probleme.
// 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;
}
}]);
den oben stehenden Code verwenden, ich versuche, einen Knoten zu einem Drupal Service Endpunkt schreiben erstellt werden - so muß ich, Körper und Knotentyp für die einen Titel schreiben neuer Knoten
Darüber hinaus habe ich X-CSRF-Token und Plätzchen Informationen zu veröffentlichen, die mit Drupal mein Eckige Benutzer authentifiziert, so kann der Knoten erfolgreich erstellt werden.
Allerdings erhalte ich folgende Fehlermeldung:. Refused to set unsafe header "Cookie"
gefolgt von einer Meldung, die der Benutzer sagt, ist nicht angemeldet - ich den Benutzer bestätigen kann, nicht nur existieren, sondern angemeldet
Mein Netzwerk Registerkarte zeigt keine Details Meine Token- oder Cookie-Details beginnen gesendet - was erklären würde, dass der Benutzer nicht authentifiziert wird.
Kann mir jemand helfen zu verstehen, wie ich meine Cookie- und Token-Daten senden kann?
UPDATE
Bitte entschuldigen Sie meine komplette newbness in allen Dingen Angular aber ich versuchte, das Hinzufügen des withcredentials Linie, wie in dem folgenden Code:
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
......
Aber ich folgende Fehlermeldung erhalten:
Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.3.0-rc.2/$injector/modulerr?p0=headlessQS&p1=…
Auch, wenn der Code mit den Zugangsdaten funktioniert, ich meine Token etc Daten wie im folgenden Code hinzufügen:
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
Danke für Ihre Antwort Ben. Bitte entschuldigen Sie meine Neuigkeit, aber ich habe keine Ahnung, wo und wie Sie Ihre Vorschläge in meinen Code integrieren können. Glaub mir, ich habe es versucht und bisher nicht geschafft. Können Sie mir bitte meine Richtung anbieten? – sisko
Sie sollten in der Lage sein, die '$ httpProvider' Standardwerte mit einem' .config' Block in Ihrer AngularJS Hauptdatei zu implementieren (höchstwahrscheinlich app.js). –
Ich versuchte diesen Ansatz ohne Erfolg. Ich habe ein Update zu der ursprünglichen Frage hinzugefügt, damit Sie sehen können, was ich meine. Danke für deine fortwährende Hilfe – sisko