2012-07-17 87 views
2

我需要为我的应用程序中的每个用户保存设置。使用联合登录时保存用户设置

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

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

回答

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作为UserWrapper的父项,以防将多个电子邮件地址与同一个帐户相关联可能会引起您的兴趣。

相关问题