修改08/01/2014
截至此编辑时,我意识到至少从ndb数据存储中删除了主题属性db.UserProperty()
。好!
所以......有一个存储电子邮件地址的db.UserProperty()模型类 按Unicode顺序。为什么以及如何与仅存储
的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()for Models以保存用户实例,稍后当用户回来时他们可以获得db。该特定用户的模型实例。
在我看来,这会打开应用程序用户验证中的漏洞。
@RocketDonkey的答案解释了我的查询的根源,并给出了为什么不存储db.UserProperty()用户对象实例来存储用户身份验证的一个很好的解释。
正确的方法是存储User实例的 user_id()属性,因为它对每个用户都是唯一且固定的。
P.S。对不起我的英语不好。如果有人可以编辑,将不胜感激。
答案 0 :(得分:4)
修改:如documentation on User objects所示:
db和NDB库都具有UserProperty属性类型 应用程序可以存储用户值。但是,因为这些值变成了 用户更改电子邮件地址时无效,大多数应用程序没有 很好地利用了这个功能。
User
个实例始终是唯一的并且可以进行比较,但由于它们在数据存储区中表示为唯一user_id
(始终是唯一的)和用户的电子邮件地址,因此用户更改了电子邮件地址将使比较变得无用(这在文档中也表示为不存储它的另一个原因)。回到原始问题(使用db.UserProperty
),这似乎表明在大多数情况下,没有正当理由将用户实例存储在数据存储区中(如果我遇到过这个问题,我会更新它原因)。