반응형
Ajax 제출 시 symfony 2 CSRF 토큰 보호 사용 안 함
웹 서비스를 통해 내 symfony2 앱과 대화하는 모바일 앱을 구축하고 있는 중 특정 컨트롤러/액션에서 CSRF 보호를 비활성화하는 방법을 찾을 수 없습니다.
이 액션에 등록 데이터를 투고하고 sf2 폼 검증을 사용하고 싶습니다.모바일 앱에서 양식을 호출하지 않음
컨테이너 매개 변수를 변경할 수 없습니다. 고정된 매개 변수이므로 예외를 발생시킵니다...
응용 프로그램 전체에 대해 양식 보호를 사용하지 않도록 설정하지 않음
단서는?
고마워!
업데이트: symfony 2.1.x 사용
/**
* {@inheritdoc}
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'csrf_protection' => false,
));
}
위의 답변보다 조금 더 쉽고 빠른 솔루션을 찾고 있다면 다음과 같이 하십시오.
<?php
// ...
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\OptionsResolver\OptionsResolver;
class MyType extends AbstractType
{
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'csrf_protection' => false,
));
}
}
..또는 이전 버전(Symfony 2.0)을 사용하는 경우.*):
<?php
// ...
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class MyType extends AbstractType
{
// ....
public function getDefaultOptions(array $options)
{
$options = parent::getDefaultOptions($options);
$options['csrf_protection'] = false;
return $options;
}
}
자세한 내용은 Symfony 문서를 참조하십시오.
편집: 최신 Symfony 버전에 대한 답변 업데이트, naitsirch 감사합니다.
폼 팩토리 사용
컨트롤러에 간단한 폼을 작성하는 경우:
$form = $this->container->get('form.factory')
->createNamedBuilder(null, 'form', null, array('csrf_protection' => false))
->add('yourField','text', array(
'label' => false,
'mapped' => false
))
->getForm();
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'csrf_protection' => false,
]);
}
Symfony 3에서 양식 팩토리 사용
use Symfony\Component\Form\Extension\Core\Type\FormType;
$form = $this->container->get('form.factory')
->createNamedBuilder(null, FormType::class, null, array('csrf_protection' => false))
->add('yourField','text', array(
'label' => false,
'mapped' => false
))
->getForm();
Mick의 답변에서 개작
100% 확신할 수는 없지만 어디선가 읽은 것 같은데csrf_provider
옵션을 선택합니다.
모든 공급자는 인터페이스의 하위 유형입니다.Symfony\Component\Form\Extension\Csrf\CsrfProvider
독자적인 것을 작성할 수 있습니다.
class MyNonCsrfProvider extends DefaultCsrfProvider{
public function isCsrfTokenValid($intention, $token)
{
return true;
}
}
컨트롤러:
$this->createForm(new CustomFormType(), array(
'csrf_provider' => new MyNonCsrfProvider()
));
저도 해보진 않았지만 이건 가능한 해결책처럼 들리는데...
언급URL : https://stackoverflow.com/questions/9887451/disable-symfony-2-csrf-token-protection-on-ajax-submit
반응형
'source' 카테고리의 다른 글
잠금 파일을 만들거나 열 수 없습니다. /data/mongod.lock errno:13 권한 거부됨 (0) | 2023.02.14 |
---|---|
ASP.NET AJAX vs jQuery in ASP.넷 MVC (0) | 2023.02.14 |
.htaccess 내부 리다이렉트가 문자열 매개 변수와 함께 작동하지 않음 (0) | 2023.02.14 |
clearity.js by Microsoft에 의한 전체적인 페이지 로드 속도 저하 (0) | 2023.02.14 |
렌더링 전에 리액트 컴포넌트의 크기(높이/폭)를 확인하는 방법 (0) | 2023.02.14 |