3

编辑 08/01/2014

截至本次编辑时,我意识到主题属性db.UserProperty()至少已从 ndb 数据存储中删除。好的!


所以...有 db.UserProperty() 模型类以 Unicode 顺序存储电子邮件地址。为什么以及它与仅存储

users.get_current_user().email() 

在 db.StringProperty() 可以说?

像这样使用它是否安全:

class LocalUser(db.Model):

    user_account = db.UserProperty()

my_local_user = LocalUser.all().filter("user_account=", users.get_current_user().get())

编辑

我问这个问题的原因是因为 Google App Engine 的许多示例和一些书籍使用模型的 db.UserProperty() 来保存用户实例,然后当用户回来时,他们可以获得 db.Model 实例那个特定的用户。

在我看来,这会在您的应用程序的用户验证中打开漏洞。

@RocketDonkey 的答案解释了我的查询的根源,并很好地解释了为什么不存储 db.UserProperty() 用户对象实例来存储用户身份验证。

正确的方法是存储 User 实例的user_id()属性,因为它对于每个用户都是唯一且固定的。

PS对不起我的英语。如果有人可以编辑,将不胜感激。

4

1 回答 1

4

编辑:用户对象的文档所示:

db 和 NDB 库都具有 UserProperty 属性类型,以便应用程序可以存储用户值。但是,由于这些值在用户更改电子邮件地址时变得无效,因此大多数应用程序都无法很好地使用此功能。

User实例始终是唯一的并且可以进行比较,但由于它们在数据存储中表示为唯一的user_id(始终是唯一的)和用户的电子邮件地址,因此更改其电子邮件地址的用户将使比较无用(这也在文档作为不存储它的另一个原因)。回到您最初的问题(使用db.UserProperty),这似乎表明在大多数情况下,没有正当理由将 User 实例存储在数据存储中(如果我确实遇到原因,我会更新它)。

于 2012-12-22T01:08:37.760 回答