注册检查电子邮件是否存在而不检查数据库

registeration check if email exist without checking database

考虑一下,我想用 Javascript(例如 Angular)制作一个多步骤注册表,我不想在所有步骤完成之前做一些 ajax。 我认为可能正在 Javascript 中执行一个函数,该函数将用户电子邮件作为参数来确定数据库中是否存在电子邮件。 但实际上我不希望我的函数执行 Ajax 调用。 考虑每次用户在数据库中注册时应更新此算法。

这有点难说,但我的意思是应该有一种算法可以在没有项目的情况下确定项目是否存在。 (我知道这看起来有点傻。但实际上不是)。

您一次从数据库中获取所有项目,并在了解所有项目的情况下编写算法,在不知道数据库项目的情况下确定给定项目是否存在于数据库中。

考虑登录过程系统可以在不知道用户密码的情况下判断用户密码是否正确。系统只知道一些关于用户密码的事情(散列或 md5 或...)

所以我们可以在这里对我们现有的用户执行一个函数 table 并获取一些值和字符串或...并且使用这些值我们可以检测用户电子邮件是否已经存在于数据库中而无需全部知道项目。

我提出问题的原因之一是性能问题(考虑用户 table 有这么多记录。)第二个原因只是为了花哨 :)

从电子邮件地址生成哈希。假设哈希是一个 20 位的值(例如,只取 md5 哈希的低 20 位)。这意味着您需要一个 128K 字节 table,其中每个位是 0 或 1,具体取决于是否有一封电子邮件散列为该值。您可以通过生成哈希并在 table 中查找来轻松检查是否存在电子邮件。 1 表示电子邮件已被使用或存在哈希冲突。 0 保证在生成 table 时未使用电子邮件。为减少冲突的可能性,请确保 table 中的位数远大于用户数。 20 位给出 100 万个哈希桶。

因此,对于每个请求,您要构建一个包含整个数据集的自定义响应脚本,并将其发送回客户端进行检查?撇开完整性问题不谈,如果您不检查从客户端发回的电子邮件地址,并且需要对数据进行哈希处理以防止泄露,那么这将无法很好地扩展。它可以非常快速地处理 10 甚至 100 行,但它不适用于数千行的 10 行。