在App Engine应用程序中,我将注册成员存储在如下所示的表中:
class Member(db.Model):
user = db.UserProperty(required=True)
#other stuff
当我需要检查用户是否已经在我的会员表中时,问题就开始了。 GAE文档说用户值不保证不会及时更改,因为它由用户对象+电子邮件组成。因此,如果用户更改该帐户上的电子邮件,它将会更改。
我正在使用OpenID。所以我虽然使用User.federated_identity()作为稳定的标识符。
然而,为了检查这个,我必须做这样的查询:
u = users.get_current_user()
rm = Member.all().filter('user_federated_identity =',u.federated_identity()).get()
这是Django中的有效查询,但显然不在GAE中。我可以在这做什么,将所有成员加载到内存并检查他们的federated_identity?
答案 0 :(得分:1)
你应该可以这样做:
u = users.get_current_user()
rm = Member.all().filter('user =', u).get()
答案 1 :(得分:0)
也许您可以通过唯一的key_name识别您的用户:
key_name = "member/%s" % users.get_current_user ().user_id
user_ref = Member.get_or_insert (key_name)
答案 2 :(得分:-1)
GAE User API明确提到user_id()是一个永久性标识符,可以在电子邮件更改中保留。您可以将其存储在模型中的单独字段中。
请注意,它仅适用于Google帐户。