在一个布局中使用多个表单作为不同的操作导致哈希验证错误

Posted

技术标签:

【中文标题】在一个布局中使用多个表单作为不同的操作导致哈希验证错误【英文标题】:using multiple forms as different actions in one layout leading to hash validation error 【发布时间】:2012-06-23 06:29:26 【问题描述】:

我在一页有两种形式,一种用于登录,一种用于忘记密码,

<?php echo $this->layout()->user_login = $this->action('login','user',null); ?>
<?php echo $this->layout()->user_forgot = $this->action('forgot','user',null); ?>

表格在行动中,每个表格都有自己的观点, 我在忘记操作中有一个哈希验证器,但是当我提交忘记的表单时,我收到“两个给定的令牌不匹配”的错误,我认为在布局过程中,表单将被实例化并且哈希 id 会改变: (我不知道如何解决它......

这是被遗忘的表格

<?php
class listab_Form_Forgot extends Zend_Form

public function init()

    $this->addPrefixPath("listab_Model",'listab/Model/','decorator');
    // initialize form
    $this->setAction('/user/forgot')
         ->setMethod('post');
    // create text input for name 
    $user = new Zend_Form_Element_Text('name');
    $user->setLabel('username or email')
         ->setOptions(array('size' => '30'))
         ->addFilter('htmlEntities')            
         ->addFilter('StringTrim')
         ->setDecorators(array('ViewHelper','Label'))         
         ->setRequired(true);

    $submit = new Zend_Form_Element_Submit('subfg');
    $submit->setLabel('help me find my password')
           ->setOrder(100)
           ->setOptions(array('class' => 'submit'))
            ->setAttrib('class', 'gbox ozvbut') 
           ->setDecorators(array('ViewHelper');


    $hash = new Zend_Form_Element_Hash('hashs');
    $hash->setSalt('wannaknowthisha?')  ;

    $this->addElement($user)
            ->addElement($hash)
            ->addElement($submit) ;               

【问题讨论】:

【参考方案1】:

默认的ttl = 1生存时间)您可以尝试添加一跳或两跳。看起来您可能正在一个操作中实例化表单,然后在另一个操作中进行处理。这可能会导致哈希超时(也许)。

$hash = new Zend_Form_Element_Hash('hashs');
    $hash->setSalt('wannaknowthisha?');
    $hash->setTimeout(2);//Set timeout for CSRF session token

希望这会有所帮助...

【讨论】:

以上是关于在一个布局中使用多个表单作为不同的操作导致哈希验证错误的主要内容,如果未能解决你的问题,请参考以下文章

具有不同 UsernamePasswordAuthToken 的多个 AuthenticationProvider 来验证不同的登录表单而无需回退验证

password_verify 不验证哈希

jQuery Validation - 一个 asp.net 表单上的多个提交按钮,不同的验证组?

Redis数据结构之字典

Django之路——form modelform formset modelformset的各种用法

使用 DTO 和哈希映射的 Java 服务器端表单验证