Как отправить действительный токен crsf с помощью службы angularjs $post и 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... >

В моем угловом контроллере:

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');
                });
        }

    };
}]);

Моя форма называется "обзор".

// Form type class
public function getName()
{
    return 'review';
}

Я пробовал разные имена (_token и т. д.), я проверял, возвращают ли {{ form_widget(form._token) }} и csrf_token('review') одно и то же значение, но безуспешно.

Заранее спасибо за вашу помощь.


person Adrien G    schedule 28.01.2015    source источник


Ответы (1)


в формах symfony2 атрибуты элементов id и name состоят из getName()+field name, в вашем случае токен будет иметь id="review__token" и name="review[_token]", поэтому фреймворк проверит, что review[_token] присутствует в данных поста. Я думаю, вам нужно изменить параметр _csrf_token на review[_token], как и другие параметры.

person Castro Roy    schedule 28.01.2015
comment
Большое спасибо. Я думал, что поле маркера не было связано с моим типом обзора, потому что это поле не является частью моего объекта обзора... - person Adrien G; 28.01.2015