目前我尝试使用zend framework 2的csrf保护。
但每次我发送表单时,都会收到一条错误消息:
提交的表格并非来自预期的网站
我已经这样暗示了csrf保护:
1)创建一个表单类并添加csrf:

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

2)在视图文件中回显csrf元素:
 echo $this->form()->openTag($forgotPasswordForm);
 echo $this->formRow($forgotPasswordForm->get('email'));
 echo $this->formRow($forgotPasswordForm->get('secret'));
 echo $this->formSubmit($forgotPasswordForm->get('submit'));
 echo $this->form()->closeTag($forgotPasswordForm);

我发现csrf令牌没有存储在会话中,但是为什么?

最佳答案

我的控制器里有一条线:

$forgotPasswordForm = new ForgotPassword();
$forgotPasswordForm->prepare();

我将$forgotPasswordForm->prepare()移到视图文件,现在它工作了:-)
谢谢你的支持!

10-06 13:30