GAE用户API的一些BUG
2009 11 9 02:33 AM 2562次查看
分类:Google App Engine 标签:Google App Engine
- 使用User构造函数创建的用户,无论是否真实存在,user_id()的返回值都是None。(文档中有提到,创建时不验证,但保存到数据库时会验证)。只有get_current_user()或数据库里取出的真实用户才能得到有效的user_id。
- 无法用user_id来构造一个User对象。虽然User的构造函数有个隐藏的_user_id参数,但只影响user_id()的返回值,存储到数据库时仍只判断email。
- 一个Google账号可能有多个email,而用副email登录时,拿到的也是主email。
- 当用户更改Google账号的邮件地址后,若未退出当前登录,且未用新邮件地址登录该app过,则get_current_user()拿到的User对象仍关与之前的相关联,nickname()和email()返回的都是之前的邮件地址。
- 当用户更改Google账号的邮件地址后,数据库里所有关于该用户的实体都不能不能通过用户字段来找到。(索引并未失效,只是WHERE不可用,但ORDER BY正常。)
举例来说:
假设有一个模型含一个user属性,类型为UserProperty。我创建了一个该类型的实例,值为oo@xx.com。
之后,oo@xx.com这个用户将他的邮件地址改成了xx@oo.com。
则对该模型的user属性查询时,无论使用oo@xx.com还是xx@oo.com,都无法匹配到该实体。
在Data Viewer里查看该实体时,会出现“Server Error:A server error has occurred.”。
使用其他方式获取到该实体时,其user属性的nickname()和email()返回的仍然是oo@xx.com。
而不修改该实体,直接保存到数据库,该实体的user属性才会关联到xx@oo.com,且可使用xx@oo.com查询到该实体。
向下滚动可载入更多评论,或者点这里禁止自动加载。