2011-12-26 120 views
0

我需要让用户在结帐页面登录,而无需刷新页面。我设置了一个登录窗格,并使用ajax发送给服务器并进行身份验证。但是 - 这个登录过程后,当用户完成结帐形式的其余部分,有一个错误说:Ubercart - 在结帐页面登录用户

Validation error, please try again. 
If this error persists, please contact the site administrator. 

否则,当我登录,然后刷新页面,然后才提交结算形式 - 无问题。我假设刷新页面时,ubercart做了一些我失踪的事情,以便结帐成功完成......这些东西是什么?

编辑:好的,所以我戳了一下。发现这两个函数:

uc_cart_checkout_form_validate

uc_cart_checkout_form_submit

我已经做了一些测试,发现_Validate被调用,但_submit不会被调用!怎么可能?编辑2:好吧,所以我发现有些东西是设置验证错误,但我不知道是什么。我完全注释掉了uc_cart_checkout_form_validate中的所有代码,并且我仔细检查了没有任何其他验证函数与结帐表单关联。

在uc_cart_checkout_form_validate的开头,我检查会话变量并出现错误。谁把它放在那里?

使用的Drupal 6的Ubercart 2

回答

0

如果有人碰巧到这个问题,并想知道答案是什么,我得到它:当一个匿名用户填写结帐表单没有$ _REQUEST [

'form_token']。对于经过验证的用户 - 有!

所以无论如何,问题是,当我登录结帐表单中的用户并尝试提交 - 表单创建时没有表单标记,但是当表单提交时有一个登录用户 - 所以Drupal寻找表单令牌并找不到一个。这就是表单不验证的原因。

反正对我来说,解决办法是添加这_form_alter:

if ($form_id == 'uc_cart_checkout_form') { 
    unset($form['#token']);   
}