App EngineでフェデレーションIDオプションを使用して、各ユーザーのキーとして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)
そして私が1つを取得するとき:
key_name = user.federated_identity()
return User.get_by_key_name(key_name)