如何使用 angularjs $post 服务和 symfony2 发送有效的 csrf 令牌
How to send a valid crsf token with angularjs $post service and symfony2
我想我阅读了足够多的主题来发布这个问题...我真的很想知道为什么我使用 ajax 提交的内容无效(CSRF 令牌无效。请尝试重新提交表单)。
这是我发送表单数据和 csrf 令牌的方式。
<form name="ReviewForm" ng-init="formData = { url: '{{ path('my_route') }}', token: '{{ csrf_token('review') }}' } ng-submit="sendReview(ReviewForm.$valid)" other parameters... >
在我的 angular 控制器中:
myAppcontroller('FormManagerCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.formData = {};
$scope.sendReview = function (isValid) {
if (isValid) {
$http.post($scope.formData.url, $.param({
'review[pseudo]': $scope.formData.pseudo,
'review[email]': $scope.formData.email,
'review[title]': $scope.formData.title,
'review[website]': $scope.formData.website,
'review[rate]': $scope.formData.rate,
'review[content]': $scope.formData.content,
'_csrf_token': $scope.formData.token
}), {
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
.success(function (data, status, headers, config) {
console.log('ok');
})
.error(function (data, status) {
console.log('ko');
});
}
};
}]);
我的表单名称是 "review"。
// Form type class
public function getName()
{
return 'review';
}
我尝试了不同的名称(_token 等...),我检查了 {{ form_widget(form._token) }}
和 csrf_token('review')
是否返回相同的值但没有成功。
在此先感谢您的帮助。
在 symfony2 中,元素 id
和 name
属性由 getName()
+field name
组成,在您的情况下,令牌将具有 id="review__token"
和 name="review[_token]"
,因此,框架将检查 review[_token]
是否存在于 post 数据中。我认为您需要像其他参数一样为 review[_token]
更改 _csrf_token
参数。
我想我阅读了足够多的主题来发布这个问题...我真的很想知道为什么我使用 ajax 提交的内容无效(CSRF 令牌无效。请尝试重新提交表单)。
这是我发送表单数据和 csrf 令牌的方式。
<form name="ReviewForm" ng-init="formData = { url: '{{ path('my_route') }}', token: '{{ csrf_token('review') }}' } ng-submit="sendReview(ReviewForm.$valid)" other parameters... >
在我的 angular 控制器中:
myAppcontroller('FormManagerCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.formData = {};
$scope.sendReview = function (isValid) {
if (isValid) {
$http.post($scope.formData.url, $.param({
'review[pseudo]': $scope.formData.pseudo,
'review[email]': $scope.formData.email,
'review[title]': $scope.formData.title,
'review[website]': $scope.formData.website,
'review[rate]': $scope.formData.rate,
'review[content]': $scope.formData.content,
'_csrf_token': $scope.formData.token
}), {
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
.success(function (data, status, headers, config) {
console.log('ok');
})
.error(function (data, status) {
console.log('ko');
});
}
};
}]);
我的表单名称是 "review"。
// Form type class
public function getName()
{
return 'review';
}
我尝试了不同的名称(_token 等...),我检查了 {{ form_widget(form._token) }}
和 csrf_token('review')
是否返回相同的值但没有成功。
在此先感谢您的帮助。
在 symfony2 中,元素 id
和 name
属性由 getName()
+field name
组成,在您的情况下,令牌将具有 id="review__token"
和 name="review[_token]"
,因此,框架将检查 review[_token]
是否存在于 post 数据中。我认为您需要像其他参数一样为 review[_token]
更改 _csrf_token
参数。