web-dev-qa-db-ja.com

DotNet CoreのNormalizedUserName VS Username

MongoDBのIUserLoginStoreのカスタム実装を作成しようとしていますが、使用すると気付きました

UserManager<ApplicationUser>

メソッドで

 var userResult = await _userManager.CreateAsync(user);

それはの実装を通過します

GetUserNameAsync
FindByNameAsync
SetNormalizedUserNameAsync
GetUserIdAsync

2つの質問を明確にしたいと思います。

  • normalizedUsernameとUserNameの目的は何ですか?私が気付いた唯一の違いは、normalizedUserNameが大文字であることです。

  • 私は実装を使用して、外部ログイン(Google plus)からユーザーを格納するだけです。ユーザー名とNormilizedUserNameを省略できる方法はあります。基本的に、これらの3つのフィールドでメールを使用しているので、データを複製していますが、それは私には意味がありません。

何かお勧めですか?

22
jack.the.ripper

1)正規化により、大文字と小文字のみが異なるユーザー名を登録することができなくなります。

2)いいえ-これらのフィールドは基本データモデルの一部です。

19
blowdart
  1. はい、できます(本当に必要な場合):
    1. FindByNameAsyncは、大文字と小文字を区別しないu.Nameで検索する必要があります(DB設定を信頼していますか?)
    2. GetNormalizedUserNameAsyncはuser.Name.ToUpperCase()を返す必要があります
    3. SetNormalizedUserNameAsyncは何もすべきではありません

2.1はDBのname列のインデックスをスキップし、アプリのパフォーマンスを低下させる可能性があることに注意してください(DBをもう一度確認してください)。または、「クライアント側」の実行を引き起こします(ここでも、パフォーマンスが劇的に低下します)。実装によって異なります。

このような「最小化」されたUserクラスは、特定のOAuthプロバイダーのみを使用し、指定されたドメイン(Google Apps)からのみユーザーを受け入れる)を使用する内部エンタープライズシステムでのみ使用します。このシステムは、ユーザー名で検索すると、多くのメソッドで安全にNotImplementedExceptionをスローします。

17
Dmitry