2016-04-05 2 views
2

Я пытаюсь реализовать формы FOSRestBundle и Symfony. Я нашел это tutorial, но у меня есть проблемы с this частиFOSRestBundle & invalid form CRF token

private function processForm(PageInterface $page, array $parameters, $method = "PUT") 
{ 
    $form = $this->formFactory->create(new PageType(), $page, array('method' => $method)); 
    $form->submit($parameters, 'PATCH' !== $method); 
    if ($form->isValid()) { //form is not valid. 
     $page = $form->getData(); 
     $this->om->persist($page); 
     $this->om->flush($page); 
     return $page; 
    } 
    throw new InvalidFormException('Invalid submitted data', $form); 
} 

ERROR: The CSRF token is invalid. Please try to resubmit the form.

Here является контроллер от руководства. А вот мой класс контроллера:

public function newAction(Request $request) 
{ 

    $form = new EntryType(); 
    $newEntry = $this->container->get('entries.entry.handler')->post(
     $request->request->get($form->getName()) 
    ); 

    return View::create() 
     ->setStatusCode(200) 
     ->setFormat('json') 
     ->setSerializationContext(SerializationContext::create()->setGroups(array('list'))) 
     ->setData($newEntry); 
} 

Должен ли я пропустить проверку isValid() или исправить это каким-то образом? Как?


ОК, Теперь это ясно. проверка КРФ (csrf_protection) должны быть отключены

CSRF token is invalid when calling rest post api from php Client https://github.com/liuggio/symfony2-rest-api-the-best-2013-way/issues/1#issuecomment-31435232 CSRF validation needed or not when using RESTful API?

+0

как вы визуализируете форму? –

+0

Я этого не делаю. Я хочу добавить новую запись через API. Пожалуйста, проверьте мой обновленный вопрос – breq

+0

Возможный дубликат [Symfony - токен CSRF недействителен - FosRestBundle] (http://stackoverflow.com/questions/40461760/symfony-csrf-token-is-invalid-fosrestbundle) – Trix

ответ

4

Из части 3 tutorial:

It's possible to disable the CSRF based on the user’s role.

# app/config/config.yml 
fos_rest: 
    disable_csrf_role: ROLE_API 
    # you can also try 
    # disable_csrf_role: IS_AUTHENTICATED_FULLY 

Смотри также issue этого.