我正在使用設計來管理我的應用程序的用戶帳戶。到目前爲止,一切工作都很順利,但我偶然發現了我發現的非常奇怪的行爲。基本上發生的事情是,我下面的代碼添加到我的用戶模型:密碼驗證中斷設計確認
validates :password, { confirmation: true, length: { in: 6..20 } }
validates :username, { uniqueness: true, length: { in: 3..25 } }
乍一看這似乎很好地工作。未能輸入有效信息會使用戶信息不能保存到數據庫中。不幸的是,它以某種方式破壞了設計的電子郵件確認。設計仍然在註冊時發送電子郵件,但確認鏈接不像以前那樣工作。突然間發生了什麼事情,他發送我到頁面,我可以重新請求確認信息(儘管沒有被告知這樣做)。他還抱怨(通過閃光消息)我的密碼不能「空白」,並且用戶未被保存。這是毫無意義的,因爲在確認鏈接被點擊之前用戶已經被保存了(也有一個有效的密碼)。而且它實際上得到保存,因爲我發現手動檢查數據庫表。
我從這裏收集到的是他可能試圖更改用戶表中的某些列,如confirmed_email和confirmed_at等。但不知何故,他也嘗試在同一時間提供新的pw,這絕對不是他應該正在做。爲什麼他將我重定向到可以重新發送確認郵件的頁面,這完全超出了我的想象。
我能做些什麼來解決我的問題?我不想使用:validatable,而是做我自己的驗證,而不會完全破壞我的設計。下面是一些額外的信息:
軌3.2.12
紅寶石1.9.3p392 色器件2.2.3
日誌:
入門使用 「/用戶/確認confirmation_token = ojx35QawQdHSWi655mru?」 爲127.0。 0.1在2013-06-20 17:01:12 +0200 處理由Devise :: ConfirmationsController#顯示爲HTML 參數:{「confirmation_token」=>「ojx35QawQdHSWi655mru」} 用戶負載(0.3ms)SELECT「users」。 * FROM「users」WHERE「users」。「confirmation_token」='ojx35QawQdHSWi655mru'LIMIT 1 (0.1ms)BEGIN User Exists(0.2ms)SELECT 1 AS one FROM「users」WHERE(「users」。「username」='what heck'AND「users」。「id」!= 22)LIMIT 1 (2.1ms) (0.1ms)ROLLBACK 渲染設計/共享/ _links.erb(0.4ms) 佈局/應用程序中渲染設計/確認/ new.html.erb(2.1ms) 已完成200在14ms內完成(Views:9.0ms | ActiveRecord的:爲0.8ms)
對我來說這條線是用相同的號碼活躍,但我仍然可以使用2個報名符號長度密碼。有人知道爲什麼 – Gediminas
取消註釋後,您是否重新啓動服務器? – lilwupster
是的。對我來說,它只在將驗證規則添加到模型中時纔有效... – Gediminas