デフォルトのMVCメンバーシップスキームは問題ありませんが、登録時にさらに多くの情報を登録するように拡張するにはどうすればよいですか?または、カスタムメンバーシップを使用する必要がありますか?
あなた自身も含めて、あまりにも多くの人々がデフォルトのASP.NETメンバーシッププロバイダーから多くを得ると期待していると思います。顧客が勤務している会社や管理者の名前など、アプリケーション固有のものを処理するようには設計されていません。主な目的は、認証用のパスワードを保存することです。
確かに、2つのキーの認証ペアが存在できるように、パスワードをユーザー名にリンクする必要があります。ユーザー名とは異なる場合は、パスワードについてユーザーに連絡するために、ユーザーの電子メールアドレスも必要になる場合があります。ただし、メンバーシップストアにはユーザーに関する他の情報を保存しないでください。アプリケーションデータベースに保存します。
アプリケーションとメンバーシッププロバイダーの間でデータを結合するには、メンバーシッププロバイダーのUserNameまたはProviderKeyをデータベーステーブルの1つの列として使用します。明示的に関連していない2つのエンティティになります。SqlMembershipProviderをアプリケーションデータベースとは別のデータベースに実装することもできます。それらが同じデータベースにある場合でも、プロバイダーテーブルとアプリケーションテーブルの間に外部キーを持たないようにします。これは、あなたが所有しているものと、メンバーシッププロバイダーに「アウトソーシング」しているものとの間の水を濁らせます。
最終的に、ユーザーの2つの物理的に分離された表現になります。1つはMembershipProviderで、これにはユーザーのパスワードが含まれています。もう1つはアプリケーションで、他のビジネス固有の詳細が含まれています。この2つは、アプリケーション内でのみ論理的に関連付けられています。メンバーシップAPIを使用してユーザーを認証すると、そのUserNameおよび/prProviderKeyがアプリケーションで使用できるようになります。次に、そのデータを使用してアプリデータベースにクエリを実行し、追加の詳細を取得できます。clientID
これは、またはgeneralID
あなたが言及したようなものを置くかもしれない場所です。
System.Web.Security.Member * APIを見ると、これにより状況がより明確になるはずです。これは、ユーザーをパスワードやパスワードのリセットに関連するその他の情報(電子メールアドレス、質問と回答など)に関連付けることで非常にうまく機能します。したがって、パスワードプロバイダーのみをアウトソーシングし、アプリケーションに依存して重要な処理を実行します。