我需要让用户在结帐页面上登录,而无需刷新页面。我设置了一个登录窗格,并使用ajax将其发送到服务器并对其进行身份验证。但是 - 在此登录过程之后,当用户完成结帐表单的其余部分时,会出现错误信息:
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没有被调用!怎么可能?
EDIT2:好的,所以我发现有些东西正在设置验证错误,但我无法弄清楚是什么。我完全注释掉了uc_cart_checkout_form_validate中的所有代码,并且我仔细检查了没有与结帐表单相关的任何其他验证功能。
在uc_cart_checkout_form_validate的开头我检查会话变量并且出现错误。谁把它放在那里???
使用drupal 6,ubercart 2
答案 0 :(得分:0)
如果有人碰巧遇到这个问题并想知道答案是什么,我就明白了:
当匿名用户填写结帐表单时,没有$ _REQUEST ['form_token']。对于经过身份验证的用户 - 有!
所以无论如何问题是当我在结帐表单中登录用户并尝试提交时 - 创建表单时没有表单令牌,但是当提交表单时,有一个登录用户 - 所以drupal看起来对于表单令牌,找不到一个。这就是表单无法验证的原因。
无论如何,我的解决方案是将其添加到_form_alter:
if ($form_id == 'uc_cart_checkout_form') {
unset($form['#token']);
}