使用联合登录时保存用户设置

时间:2012-07-17 00:37:34

标签: python google-app-engine openid

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

我尝试将用户用作我的设置对象的父级,但由于用户没有密钥,我无法执行此操作。 然后我在我的设置对象中创建了一个实例,该实例具有对用户属性的引用,但在文档中,如果用户更改了其电子邮件地址,则表示UserProperty不稳定。 然后我决定将user_id保存在StringProperty()中,但如果用户使用OpenId登录,则user_id元素为None。

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

1 个答案:

答案 0 :(得分: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的父级,以防多个电子邮件地址与同一帐户相关联可能会引起您的兴趣。