0

Zend Framework 2 の formElement csrf に問題があります。

無効なフォームを送信し、同じページアクセスしてページを更新するまでは問題なく動作します。フィールドで「 notTheSame 検証エラーが発生し、 「送信されたフォームは、予期されたサイトから発信されたものではありません」というメッセージが表示され ます。csrf フィールドの値を確認すると、送信前の値とは異なるためです。

csrf フィールドを追加する前に、フォームは正常に機能していました。

次のようにcsrfフィールドを作成しています:

class SignupForm extends Form
{
    public function __construct()
    {
        parent::__construct('signup');

        $this->setAttribute('method', 'post')
             ->setHydrator(new ClassMethodsHydrator(false))
             ->setInputFilter(new InputFilter());

        $this->add(array(
             'type' => 'Zend\Form\Element\Csrf',
             'name' => 'csrf',
             'options' => array(
             )
         ));

    // I also add a couple of fieldsets after this

そしてビューファイルで:

<?php
$form = $this->form;
$form->setAttribute('action', $this->url('needfunding', array('action' => 'register')));
$form->setAttribute('class', "signup-form start");
$form->prepare();

echo $this->form()->openTag($form);
$applicant = $form->get('applicant');
?>      

<?php $this->FormErrors($form); ?>

<?php echo $this->formRow($form->get('csrf')); ?>

(FormErrors は、フォーム メッセージを取得してスタイルを設定するビュー ヘルパーです)

私のコントローラーで:

   public function signupAction()
    {       
        $form = new SignupForm();

        /* some unrelated code [...]  */            

        $request = $this->getRequest();

        if ($request->isPost()) {

            $category_group_id = $request->getPost()->category_group;

                $selected_categories = array();

                foreach ($categories as $c) { 
                    $selected_categories[$c->getId()]=html_entity_decode($c->getName());
                }

                $form->get('category')->setValueOptions($selected_categories);

            $form->setData($request->getPost());

            if ($form->isValid()) {

        /* some unrelated code [...]  */            

                return $this->redirect()->toRoute('signupconfirmation');
           }
           else {

           }
        }

        return array('form' => $form, 'categories' => $ordered_categories);
    }

私の質問は、フォームが有効ではなかったためにフォームページに戻ったときに csrf が再生成されるのはなぜですか?

PS: この投稿で解決策を見つけることができませんでしたZend Framework 2 CSRF 保護

4

1 に答える 1