使用 App Engine 上的联合身份选项,我采用了一种将 primary_federated_identity 作为每个用户的键的方法。这样,用户可以更改电子邮件、处理任何其他内容,但仍然是同一个人。
像@Tim Hoffman 以及primary_federated_identity 我使用一个子实体,但在我的情况下它是一个UserIdentity 集合。
class User(db.Model):
primary_federated_identity = db.StringProperty(required = True)
handle = db.StringProperty(required = True)
created = db.DateTimeProperty(required = True, auto_now_add = True)
...
class UserIdentity(db.Model):
user = db.ReferenceProperty(User, collection_name = 'user_identities')
user_federated_identity = db.StringProperty(required = True)
user_federated_provider = db.StringProperty(required = True)
...
当我写一个新用户时:
from google.appengine.api import users
from models.models import User
...
def some_function():
key_name = users.federated_identity()
my_site_user = User(key_name = key_name, primary_federated_identity=key_name, handle=handle)
当我检索到一个时:
key_name = user.federated_identity()
return User.get_by_key_name(key_name)