2012-07-17 33 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的父項,以防將多個電子郵件地址與同一個帳戶相關聯可能會引起您的興趣。