编辑 2014 年 8 月 1 日
截至本次编辑时,我意识到主题属性db.UserProperty()
至少从 ndb 数据存储中删除。好的!
所以...有 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())
EDIT
我问这个问题的原因是因为 Google App Engine 的许多示例和一些书籍使用 db.UserProperty() 作为模型来保存用户实例,稍后当用户回来时他们可以获得 db.Model 实例该特定用户。
在我看来,这会在应用程序的用户验证中打开漏洞。
@RocketDonkey 的答案解释了我的查询的根源,并很好地解释了为什么不存储 db.UserProperty() 用户对象实例来存储用户身份验证。
正确的方法是存储用户身份()User 实例的属性,因为它对于每个用户来说都是唯一且固定的。
附:对不起我的英语不好。如果有人可以编辑,我们将不胜感激。
Edit:如图所示关于用户对象的文档:
db 和 NDB 库都有 UserProperty 属性类型,因此
应用程序可以存储用户值。然而,由于这些值变成
当用户更改电子邮件地址时无效,大多数应用程序没有
很好地利用这个功能。
User
实例始终是唯一的并且可以进行比较,但由于它们在数据存储中表示为唯一的user_id
(始终是唯一的)和用户的电子邮件地址,用户更改其电子邮件地址将使比较变得无用(这也在文档中指出作为不存储它的另一个原因)。回到你原来的问题(使用db.UserProperty
),这似乎表明在大多数情况下,没有有效的理由将 User 实例存储在数据存储中(如果确实遇到原因,我将更新此内容)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)