CSRF保护,开启出错,关闭出错?
CSRF protection, error if turned on, error if turned off?
我正在开发 Web 应用程序,运行 在我提交表单时出现问题,它显示 CSRF 保护错误,这不是问题,因为我不需要此表单(不包含敏感数据,我已经实现只有具有某些特权(角色)的用户才能访问此页面。
我的问题是,当我在我的 FormType 选项中使用 'csrf_protection' => false,
时,我收到以下错误:缺少一些强制参数(“id”)来为路由“myroute”生成 URL
我不介意启用 CSRF 保护,但它在我的树枝中显示了这个丑陋的错误:
CSRF token invalid, try to send the form aigan
是的,我知道上面的块并不完全是它所说的,但我是用我的母语翻译的。
有人知道这个问题的快速修复方法吗?
控制器功能
/**
* @Route("/{id}/edit", name="score_edit", methods={"GET","POST"})
*/
public function edit(Request $request, Duel $duel, DuelRepository $duelRepository): Response
{
$form = $this->createForm(ScoreType::class, $duel);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('score_edit');
}
return $this->render('score/edit.html.twig', [
'duels' => $duelRepository->findAll(),
'duel' => $duel,
'form' => $form->createView(),
]);
}
表单类型
class ScoreType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('puntenP1', TextareaType::class, [
'label' => 'Punten',
'attr' => array('style' => 'height: 25px;')
])
->add('eerstenP1', TextareaType::class, [
'label' => 'Eersten',
'attr' => array('style' => 'height: 25px;')
])
->add('puntenP2', TextareaType::class, [
'label' => 'Punten',
'attr' => array('style' => 'height: 25px;')
])
->add('eerstenP2', TextareaType::class, [
'label' => 'Eersten',
'attr' => array('style' => 'height: 25px;')
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Duel::class,
//csrf protection not needed for "scores"
//'csrf_protection' => false,
]);
}
}
Twig 文件
{{ form_start(form) }}
<div class="row">
<div class="col">
<p><b>Partuur 1</b></p>
{{ duel.team1 }}
</div>
</div>
<div class="row">
<div class="col">
{{ form_row(form.puntenP1) }}
<p>Huidig: {{ duel.puntenP1 }}</p>
</div>
</div>
<div class="row">
<div class="col">
{{ form_row(form.eerstenP1) }}
<p>Huidig: {{ duel.eerstenP1 }}</p>
</div>
</div>
<hr>
<div class="row">
<div class="col">
<p><b>Partuur 2</b></p>
{{ duel.team2 }}
</div>
</div>
<div class="row">
<div class="col">
{{ form_row(form.puntenP2) }}
<p>Huidig: {{ duel.puntenP2 }}</p>
</div>
</div>
<div class="row">
<div class="col">
{{ form_row(form.eerstenP2) }}
<p>Huidig: {{ duel.eerstenP2 }}</p>
</div>
</div>
{{ form_widget(form) }}
<button class="btn btn-success" style="margin-top: 10px">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}
这是导致问题的代码:
return $this->redirectToRoute('score_edit');
您将用户重定向到没有参数的路由,但该路由需要参数:
@Route("/{id}/edit", name="score_edit", methods={"GET","POST"})
您必须将所需的参数添加到您的路由中:
return $this->redirectToRoute('score_edit', [
'id' => $duel->getId(),
]);
我正在开发 Web 应用程序,运行 在我提交表单时出现问题,它显示 CSRF 保护错误,这不是问题,因为我不需要此表单(不包含敏感数据,我已经实现只有具有某些特权(角色)的用户才能访问此页面。
我的问题是,当我在我的 FormType 选项中使用 'csrf_protection' => false,
时,我收到以下错误:缺少一些强制参数(“id”)来为路由“myroute”生成 URL
我不介意启用 CSRF 保护,但它在我的树枝中显示了这个丑陋的错误:
CSRF token invalid, try to send the form aigan
是的,我知道上面的块并不完全是它所说的,但我是用我的母语翻译的。
有人知道这个问题的快速修复方法吗?
控制器功能
/**
* @Route("/{id}/edit", name="score_edit", methods={"GET","POST"})
*/
public function edit(Request $request, Duel $duel, DuelRepository $duelRepository): Response
{
$form = $this->createForm(ScoreType::class, $duel);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('score_edit');
}
return $this->render('score/edit.html.twig', [
'duels' => $duelRepository->findAll(),
'duel' => $duel,
'form' => $form->createView(),
]);
}
表单类型
class ScoreType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('puntenP1', TextareaType::class, [
'label' => 'Punten',
'attr' => array('style' => 'height: 25px;')
])
->add('eerstenP1', TextareaType::class, [
'label' => 'Eersten',
'attr' => array('style' => 'height: 25px;')
])
->add('puntenP2', TextareaType::class, [
'label' => 'Punten',
'attr' => array('style' => 'height: 25px;')
])
->add('eerstenP2', TextareaType::class, [
'label' => 'Eersten',
'attr' => array('style' => 'height: 25px;')
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Duel::class,
//csrf protection not needed for "scores"
//'csrf_protection' => false,
]);
}
}
Twig 文件
{{ form_start(form) }}
<div class="row">
<div class="col">
<p><b>Partuur 1</b></p>
{{ duel.team1 }}
</div>
</div>
<div class="row">
<div class="col">
{{ form_row(form.puntenP1) }}
<p>Huidig: {{ duel.puntenP1 }}</p>
</div>
</div>
<div class="row">
<div class="col">
{{ form_row(form.eerstenP1) }}
<p>Huidig: {{ duel.eerstenP1 }}</p>
</div>
</div>
<hr>
<div class="row">
<div class="col">
<p><b>Partuur 2</b></p>
{{ duel.team2 }}
</div>
</div>
<div class="row">
<div class="col">
{{ form_row(form.puntenP2) }}
<p>Huidig: {{ duel.puntenP2 }}</p>
</div>
</div>
<div class="row">
<div class="col">
{{ form_row(form.eerstenP2) }}
<p>Huidig: {{ duel.eerstenP2 }}</p>
</div>
</div>
{{ form_widget(form) }}
<button class="btn btn-success" style="margin-top: 10px">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}
这是导致问题的代码:
return $this->redirectToRoute('score_edit');
您将用户重定向到没有参数的路由,但该路由需要参数:
@Route("/{id}/edit", name="score_edit", methods={"GET","POST"})
您必须将所需的参数添加到您的路由中:
return $this->redirectToRoute('score_edit', [
'id' => $duel->getId(),
]);