0

Google App Engine モデルに User エンティティがあり、ユーザーには名前、メール、パスワードなどがあります。現在、ユーザーの電子メールをエンティティのキ​​ーとして使用しています。ユーザーがメールアドレスを変更したらどうなるか、今まで考えたことがありませんでした。

電子メールをキーとして使用することが非常に便利だった理由は、クライアント デバイスが常にユーザーの電子メールを認識しており、別の user_id を格納して追跡するよりも、電子メールで検索する方が便利だからです。

では、ユーザーがメールアドレスを変更した場合はどうなるでしょうか? 結局のところ、それは大したことなのですか?ユーザーのキーのより良いオプションは何ですか?

4

4 に答える 4

2

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)
于 2012-11-20T16:40:55.090 に答える
1

int/Integer を使用すると、GAE がキー値を割り当てます。

于 2012-08-27T12:34:19.250 に答える
0

if email == キーの場合、ユーザーがメールを変更したい場合は、新しいユーザー エンティティを作成する必要があります。
そのため、通常、電子メールは適切なキーではありません。古い参照をすべて新しい参照に置き換えるシステムを持つことができますが、それはシステムがどれほど複雑かによって異なります。

于 2012-08-27T12:36:24.147 に答える
0

私が設計したプロジェクトでは、ログインとハッシュ化されたパスワードに加えて、他のプロパティ (有効化フラグ、パスワード変更フラグなど) をユーザーの別の子エンティティとして保持しています。このエンティティのキ​​ーはログインでした。これは、キー (ログイン) をいつでも変更できることを意味し、キーを再生成する必要なく、子エンティティを削除/置換できることなどを意味していました。ユーザーを取得するには祖先クエリが必要であることを意味していましたが、これは、最初の取得後にキャッシュされました (memcache など)。

このアプローチにより、すべてのログインの詳細がユーザーから除外されます (実際には、子認証エンティティの実装を変更することで、google ログインと authtkt userid/passwd スタイルのログインがサポートされました)。

于 2012-08-28T00:19:35.013 に答える