使用 devise 4.3.0,Devise.setup 中的注釋如下:
# Configure which authentication keys should be case-insensitive.
# These keys will be downcased upon creating or modifying a user and when used
# to authenticate or find a user. Default is :email.
config.case_insensitive_keys = [:email]
我們注意到在validate模型的程序中發生了向下大小寫(lowercasing)。出乎意料的是,在 a 中會有這樣的資料更改副作用validate(在某些情況下,它會導致混合大小寫的電子郵件按原樣保存到資料庫中)。這意味著如果跳過驗證,則不應用小寫,例如
user.save!<-- 電子郵件已小寫user.save(validate: false)<-- 電子郵件未小寫user.update_attribute(:email, "[email protected]")<-- 電子郵件未小寫(因為 update_attribute跳過驗證)
我搜索了https://github.com/heartcombo/devise以case_insensitive_keys查看是否記錄了應用向下大小寫的事實validate,以及在最近的版本中是否仍然如此,并且還沒有找到任何東西。
在最近的設計版本中,引數“case_insensitive_keys”是否對鍵進行了小寫validate,如果不是,哪個版本修復了這個問題,現在在哪個階段完成了小寫(并且仍然存在不會在內部應用設計對鍵的小寫的背景關系導軌)?
uj5u.com熱心網友回復:
在撰寫本文時,根據@engineersmnky 的評論,在before_validation. 它自 2011 年以來一直這樣做(它是在修復此問題before_save 之前完成的)。
before_validation跳過驗證時不會運行,正如其他人指出的那樣(例如這里和這里),這可能導致設計允許在資料庫中重復鍵,例如電子郵件(例如[email protected]和[email protected]),即使配置具有config.case_insensitive_keys = [:email].
跳過驗證的情況可能比問題中列出的兩種情況更多。 這個Google 搜索可以提供一個起點,以找出哪種型別的代碼會導致跳過驗證。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/441502.html
