gpt4 book ai didi

ruby-on-rails - 将电子邮件存储为小写有什么问题吗?

转载 作者:行者123 更新时间:2023-12-04 03:51:18 24 4
gpt4 key购买 nike

不时地,我注意到用户的电子邮件是重复的。即使使用模型验证(应用程序级别)来检查唯一性。我怀疑这与并发问题有关。

我决定在数据库级别添加一个索引来解决这个问题。

无论如何,较低的指数可能是明智的。

即使我们保证在应用程序级别降低电子邮件。数据库提供了更强的一致性保证。

这可能永远不会重要,但让数据库强制执行它也不会受到伤害。

我可以采取许多额外的保护措施,以最大限度地提高从应用程序端输入大写字符的可能性,但应用程序仍然无法控制从其他来源进入数据库的数据,并且所有这些代码都易于开发人员使用错误、维护成本等。

class CreateUniqueIndexForUserEmails < ActiveRecord::Migration
def up
remove_index :users, :email

execute <<-SQL
CREATE UNIQUE INDEX index_users_on_lower_email ON users (LOWER(email));
SQL
end

def down
execute <<-SQL
DROP INDEX index_users_on_lower_email;
SQL

add_index :users, :email
end
end

我还在 user 中将此逻辑与此代码块相结合。模型:
def email=(value)
write_attribute :email, value.downcase
end

这确保了 FooBar@email.com被重写为 foobar@email.com (在应用程序级别)。

我在线阅读了一个 RFC,主要来自 Are email addresses case sensitive? 的指针。这表明某些电子邮件服务器关心区分大小写。

即便如此,当我今天发送电子邮件时。我几乎不介意套管。事实上,我将电子邮件输入为小写。电子邮件仍会送达。

RFC 是否值得高度考虑?即如果用户输入 FooBar@email.com , 应用程序将电子邮件注册为 foobar@email.com .这会对电子邮件“可送达性”产生任何影响吗?

如果不是,我还应该考虑哪些其他问题?

最佳答案

设计对电子邮件属性应用小写,所以我认为这不是问题。

见:https://github.com/plataformatec/devise/blob/f7b6d786066cef2f5e8d2ce9c6b6cc83918580eb/test/models/database_authenticatable_test.rb#L17

有关要考虑的转换,请参阅设计测试文件中的其他断言。

关于ruby-on-rails - 将电子邮件存储为小写有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42266616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com