在最近的设计版本中,参数 "case_insensitive_keys" 是否在验证期间将键小写,如果不是,哪个版本修复了这个问题?
Does the parameter "case_insensitive_keys" downcase the keys during validate in recent devise version, and if not which version fixed this?
使用 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
期间发生了 downcasing(小写)。
在 validate
中产生这样的数据更改副作用是出乎意料的(并且在某些情况下它会导致混合大小写的电子邮件按原样 保存到数据库中).
这意味着如果跳过验证,则不会应用小写,例如
user.save!
<-- 电子邮件已小写
user.save(validate: false)
<-- 电子邮件 未 小写
user.update_attribute(:email, "UPPERCASE@test.com")
<-- 电子邮件 未 小写(因为 update_attribute skips validation)
我在 https://github.com/heartcombo/devise 中搜索了 case_insensitive_keys
以查看是否记录了在 validate
上应用小写的事实,以及在最近的版本中是否仍然如此,并且没有'还没有找到任何东西。
参数“case_insensitive_keys”在最近的设计版本中 validate
期间是否对键进行了小写,如果没有,哪个版本修复了这个问题,现在在哪个阶段完成了小写(并且有没有仍然不会在 Rails)?
中应用设计对键的小写
根据@engineersmnky 的评论,在撰写本文时,在 before_validation
期间设计了小写键。它自 2011 年以来就这样做了(它 是 完成 before_save
在 修复 this 问题之前)。
before_validation
在跳过验证时不是 运行,正如其他人指出的那样(例如 here and here),这可能导致设计允许重复键,例如电子邮件,数据库(例如 User@test.com
和 user@test.com
),即使配置有 config.case_insensitive_keys = [:email]
.
跳过验证的情况可能比问题中列出的两种情况更多。 This Google 搜索可以提供一个起点,找出哪种类型的代码会导致跳过验证。
使用 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
期间发生了 downcasing(小写)。
在 validate
中产生这样的数据更改副作用是出乎意料的(并且在某些情况下它会导致混合大小写的电子邮件按原样 保存到数据库中).
这意味着如果跳过验证,则不会应用小写,例如
user.save!
<-- 电子邮件已小写user.save(validate: false)
<-- 电子邮件 未 小写user.update_attribute(:email, "UPPERCASE@test.com")
<-- 电子邮件 未 小写(因为 update_attribute skips validation)
我在 https://github.com/heartcombo/devise 中搜索了 case_insensitive_keys
以查看是否记录了在 validate
上应用小写的事实,以及在最近的版本中是否仍然如此,并且没有'还没有找到任何东西。
参数“case_insensitive_keys”在最近的设计版本中 validate
期间是否对键进行了小写,如果没有,哪个版本修复了这个问题,现在在哪个阶段完成了小写(并且有没有仍然不会在 Rails)?
根据@engineersmnky 的评论,在撰写本文时,在 before_validation
期间设计了小写键。它自 2011 年以来就这样做了(它 是 完成 before_save
在 修复 this 问题之前)。
before_validation
在跳过验证时不是 运行,正如其他人指出的那样(例如 here and here),这可能导致设计允许重复键,例如电子邮件,数据库(例如 User@test.com
和 user@test.com
),即使配置有 config.case_insensitive_keys = [:email]
.
跳过验证的情况可能比问题中列出的两种情况更多。 This Google 搜索可以提供一个起点,找出哪种类型的代码会导致跳过验证。