2011-12-26 119 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']);   
}