GAE用户API的一些BUG

标签:Google App Engine

今天研究了一下GAE的用户API,发现了一些BUG或不足,记录在此。
  1. 使用User构造函数创建的用户,无论是否真实存在,user_id()的返回值都是None。(文档中有提到,创建时不验证,但保存到数据库时会验证)。只有get_current_user()或数据库里取出的真实用户才能得到有效的user_id。
  2. 无法用user_id来构造一个User对象。虽然User的构造函数有个隐藏的_user_id参数,但只影响user_id()的返回值,存储到数据库时仍只判断email。
  3. 一个Google账号可能有多个email,而用副email登录时,拿到的也是主email。
  4. 当用户更改Google账号的邮件地址后,若未退出当前登录,且未用新邮件地址登录该app过,则get_current_user()拿到的User对象仍关与之前的相关联,nickname()和email()返回的都是之前的邮件地址。
  5. 当用户更改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查询到该实体。
对于最后的2个BUG,我感到非常无语,因为这直接让用户数据变得不可靠了,所以我提交了一个issue。当然,用户一般是不会更改邮件地址的…

5条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?