在最近的设计版本中,参数 "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 中产生这样的数据更改副作用是出乎意料的(并且在某些情况下它会导致混合大小写的电子邮件按原样 保存到数据库中). 这意味着如果跳过验证,则不会应用小写,例如

我在 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.comuser@test.com),即使配置有 config.case_insensitive_keys = [:email].

跳过验证的情况可能比问题中列出的两种情况更多。 This Google 搜索可以提供一个起点,找出哪种类型的代码会导致跳过验证。