0

RavenDB Oauth の例に従っていますが、ここでの標準的な方法は、ID キーの生成にユーザー名を使用することです。これにより、ユーザーは登録およびログイン時にユーザー名を入力する必要があります。

ユーザー名ではなく電子メールに基づいて認証する必要があると考えていますが、それを適切に実装する方法を見つけようとして壁にぶつかっています。

次のようにOauthを実装しました

 using (IDocumentSession Session = DataDocumentStore.Instance.OpenSession())
            {
                Session.Store(new AuthenticationUser
                {
                    Name = Email,
                    Id = String.Format("Raven/Users/{0}", Email),
                    AllowedDatabases = new[] { "*" }
                }.SetPassword(Password));
                Session.SaveChanges();

                return Session.Load(String.Format("Raven/Users/{0}", Email));
            }

これにより、次を使用してユーザーを認証できます(ログイン用に提供されるデータは電子メールとパスワードのみであると仮定します)

 using (IDocumentSession Session = DataDocumentStore.Instance.OpenSession())
            {
                return Session.Load(String.Format("Raven/Users/{0}", Email)).ValidatePassword(Password);
            }

私が見つけた問題は、電子メールをドキュメント ID キーとして使用し、電子メールが変更された場合、ドキュメント ID とその ID を参照するすべてのドキュメントをすべて変更する必要があることです。

ただし、RavenDB で生成された ID (電子メールが変更されても静的なままになる)Session.Loadを使用すると、呼び出すことができず、代わりに使用する必要がありますSession.Query。これは、ドキュメントを正しく理解していれば最適化されていません。

質問は、以前に誰かがこれに遭遇したことがありますか?(もしそうなら)どうすればこれを達成できるかについて提案してもらえますか?

4

1 に答える 1

1

電子メールが変更される可能性がある場合、それを ID として使用することはできません。最初にIDでクエリを実行し、次にクエリから取得したIDを使用して残りを実行する必要があります

于 2012-12-04T08:22:19.943 に答える