2017-01-23 28 views
0

Как изменить токен csrf в Symfony2/3, когда форма была отправлена, подтверждена и сохранена информация о форме на сервере?Изменить токен CSRF после формы отправки и подтверждения

// AppController.php 
... 
public function saveAction(Request $request) { 
    $event = new Data(); 
    $form = $this->createForm(DataForm::class, $event); 
    $form->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()) { 
     $creator = $this->getDoctrine() 
      ->getRepository('AppBundle:User') 
      ->find($this->getUser()->getId()); 
     $event->setCreator($creator); 
     $entityManager = $this->getDoctrine()->getManager(); 
     $entityManager->persist($event); 
     $entityManager->flush(); 

< здесь что-то изменить CSRF токен. ЕСТЬ ИДЕИ? >

 return $this->redirect($this->generateUrl('event_view', ['id' => $event->getId()])); 
    } 
    $message = ['text' => 'Wrong data to save', 'type' => 'danger']; 
    $this->get('session')->set('messages', [$message]); 
    return $this->redirect($this->generateUrl('event_create')); 
} 
... 

ответ

1

Следует регенерации CSRF токен автоматически. Единственная причина, я мог думать, что вы можете сделать это было бы, если вы отправите форму с AJAX и по какой-либо причине необходимо, чтобы получить следующую фишку: В вашем типе формы:

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     //...other defaults 
     'intention'  => 'data_form_intention', 
    )); 
} 

В вашем saveAction:

$csrf = $this->get('security.csrf.token_manager');  
$token = $csrf->refreshToken("data_form_intention"); 
+0

ОпцииРезолюверИнтерфейс устарел. Я использовал класс OptionsResolver с _'csrf_token_id'_ вместо _'intention'_. Благодарю. Это работает – chrisperk

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

  • Нет связанных вопросов^_^