2015-02-18 7 views
1

У меня есть контроллер, который отправляет форму.Значок CSRF от контроллера

public function myPostAction(Request $request) 
{ 
    $form = $this->createForm('my_form', $my_object); 
    $form->handleRequest($request); 
#... 

Я могу видеть, что мой CSRF токен отправил в качестве параметра

my_form [_token] => lH38HTm5P0Cv3TOc4-9xi2COx-cZ670mpJ_36gR8ccI

Я просто нужно прочитать его

$form->get('_token') 

Это говорит мне

Ребенок "_token" не существует.

Как я могу получить этот токен?

ответ

4

Вот обходной путь я собираюсь использовать то время:

$token = $request->get($form->getName())['_token']; 

Я также заметил случайно, что intention используется для создания токена имя формы

$csrf = $this->get('form.csrf_provider'); 
$intention = $form->getName(); 
$token = $csrf->generateCsrfToken($intention); 
+2

Спасибо за ваше решение. Последняя строка должна читать = вместо == (но я не могу отредактировать это, потому что для редактирования должно быть не менее 6 символов: '() – Richard

+0

Thx, обновлено –

+1

Начиная с версии 2.4 вам нужно будет использовать' security.csrf.token_manager вместо этого. Для намерения/намерения вам, вероятно, понадобится «форма» или «аутентификация». Вы можете видеть, что намерение заключается в данных сеанса, которое должно быть в var/session и иметь имя, равное имени вашего PHPSESSION значение cookie. –

0

Вы можете получить его с:

$request->request->get('my_form[_token]'); 

Если вы не отключали CSRF-защиты будет применяться и автоматически проверяются, и вы не должны проверить это самостоятельно.

+0

Благодарит Вас за ответ. '_token' там нет,' my_form [_token] 'есть. Я успешно использую автоматическую обработку маркера, но мне нужно явно получить этот токен для проблемы асинхронной загрузки документа (чтобы его можно было собрать в пост-время). –

Смежные вопросы