2

我需要在我的应用程序上保存每个用户的设置。

我尝试将用户用作我的设置对象的父级,但我不能这样做,因为用户没有密钥。然后我在我的设置对象中创建了一个引用用户属性的实例,但在文档中它说如果用户更改他们的电子邮件地址,UserProperty 是不稳定的。然后我决定将 user_id 保存在 StringProperty() 中,但如果用户使用 OpenId 登录,则 user_id 元素为无。

有没有办法将用户设置绑定到适用于谷歌帐户和 open_id 帐户的用户对象?

4

1 回答 1

0

你不能在google帐户/ open_id帐户周围添加一个包装类,这样你就可以使用父关系了吗?类似于以下内容:

UserWrapper(db.Model):
  user = db.UserProperty()

UserSettings(db.Model):
  ...

# New User
user = users.get_current_user()
new_user_settings = UserSettings(...)
new_user_wrapper = UserWrapper(key=user.nickname(), 
                               parent=new_user_settings, 
                               user=user)

# Login Existing User
user = users.get_current_user()
user_wrapper = UserWrapper.get_by_key_name(user.nickname())
user_settings = user_wrapper.parent()

如果用户想要更改他们的电子邮件地址,请使用旧电子邮件查找 UserSettings,删除关联的 UserWrapper,为新电子邮件地址创建新的 UserWrapper 并与旧的 UserSettings 关联。

请注意,我已将 UserSettings 设为 UserWrapper 的父级,以防将多个电子邮件地址与同一帐户相关联可能会引起兴趣。

于 2012-07-17T01:58:47.613 回答