Google app engine 为什么webapp2验证模型使用唯一的表?

Google app engine 为什么webapp2验证模型使用唯一的表?,google-app-engine,webapp2,Google App Engine,Webapp2,我正在我的代码库中实现webapp2身份验证,我想了解这个怪癖: 在这方面,我看到它指出: 为了确保在创建新的用户时属性的唯一性,我们首先创建 这些属性的唯一记录,如果一切顺利,我们可以 保存新的用户记录: 对我来说,这似乎是一种非常复杂的唯一性测试方法,老实说,我不完全理解“create_multi”函数在做什么……这可能就是为什么我在这里有点困惑的原因。我的思考过程是: 只需进行快速查询,查看数据存储中是否存在用户名(auth.id)。如果没有,则put() 我知道我遗漏了什么,有人能给我解

我正在我的代码库中实现webapp2身份验证,我想了解这个怪癖:

在这方面,我看到它指出:

为了确保在创建新的
用户
时属性的唯一性,我们首先创建
这些属性的唯一记录,如果一切顺利,我们可以
保存新的
用户
记录:

对我来说,这似乎是一种非常复杂的唯一性测试方法,老实说,我不完全理解“create_multi”函数在做什么……这可能就是为什么我在这里有点困惑的原因。我的思考过程是:

只需进行快速查询,查看数据存储中是否存在用户名(auth.id)。如果没有,则put()

我知道我遗漏了什么,有人能给我解释一下吗?我有一种预感,也许代码是在那里输入的,这样,如果人们愿意的话,就很容易拥有多个unique

谢谢


p、 显然,webapp2代码的灵感来自于

该模型中有两个唯一的值:username和auth\u id

因此,由于所有用户不属于同一个实体组,我们无法使用事务检查唯一性。这就是唯一模型存在的原因:确保这两个属性的唯一性

我同意,这很复杂。但你怎么做呢?(诚实的问题)

更新:有关为什么以这种方式检查唯一性的更多详细信息

只有两种方法(安全地)强制执行数据存储唯一约束:事务或使用实体键。交易最多可限制为5个实体组,使用密钥最多可限制为1个唯一属性。如果您不想使用密钥(例如,属性可以是可变的,如电子邮件),或者您确实需要在
同样,您需要创建一个专门用于唯一性检查的类型。在你发布的链接中或多或少地做了什么。

嘿,所以在我的应用程序中(被授予,而不是所有应用程序的用例)电子邮件是用户名和身份验证id。因此从这个角度来看,我建议只需查询所有身份验证ID,看看是否有任何身份验证ID与用户输入的新身份验证ID匹配。以下是我的想法:如果我们不使用事务,如果两个注册尝试以相同的毫秒注册相同的用户名,那么如果使用我的方法,可能会允许重复?让我知道我是否在正确的轨道上。谢谢是的,您不能仅基于查询而不使用事务来强制唯一性。我更新了答案来解释这一点。谢谢你的解释。起初我对此持怀疑态度,因为我认为这会非常低效,但我越想它:它只在创建用户(在注册时)时才真正使用,所以我想除非你有大量注册(这不是一个坏问题),否则不会太贵。是的,这是一个很小的代价,永远不用担心重复的用户ID。)现在,如果这不是要求太多,请接受答案。:)