【发布时间】:2025-12-30 09:15:18
【问题描述】:
我一直很困惑。我一直在使用 Google 的 User 对象,可以在这里找到:
在阅读了一些资源后,有人告诉我存储 User 对象本身并不是一个好主意,因为电子邮件可能会发生变化。 Google 建议您应该存储 User_Id 本身,因为这样做是永久安全的(即,它始终保持静态)。
当我获取当前用户并尝试使用用户对象上的user_id() 方法获取 User_Id 值时,我得到了None 值响应。
current_user = endpoints.get_current_user()
print current_user.user_id()
>> None
但是,如果我将 current_user 保存为 NDB 中的 UserProperty,然后检索相同的值,我会得到 user_id。例如:
google_user = ndb.UserProperty(required = True)
print google_user.user_id()
>> 12345678901234567890
谷歌用户对象应该如何处理?更重要的是,为什么在 NDB 保存值之前 user_id 的值为 None ?这是一种帐户/电子邮件验证吗?
您可以在此处找到来自 Google 的建议:
https://cloud.google.com/appengine/docs/python/users/userobjects
“我们强烈建议您不要存储 UserProperty,因为它包含电子邮件地址以及用户的唯一 ID。如果用户更改了他们的电子邮件地址,并且您将其旧的、存储的用户与新的用户值进行比较,他们将不匹配。相反,请考虑使用 User 用户 ID 值作为用户的稳定唯一标识符。"
编辑:我应该提一下,我正在localhost 上进行测试。部署应用程序时,endpoints.get_current_user() 的处理方式是否不同?
这是 Google 使用的示例:
class ModelWithUser(ndb.Model):
user_id = ndb.StringProperty()
color = ndb.StringProperty()
@classmethod
def get_by_user(cls, user):
return cls.query().filter(cls.user_id == user.user_id()).get()
如果我通过当前经过身份验证的用户(我无权访问)的 user_id 查询 ModelWithUser,我应该如何从 ModelWithUser 获取用户?呸。
【问题讨论】:
标签: python google-cloud-platform google-cloud-endpoints