質問

UsersというMSSQLテーブルにユーザーデータを保存します。私がしたいのは、実際にログインしたユーザーのすべてのユーザーのデータにアクセスできるようにすることです(メール、アドレス、電話、ユーザーがサブスクライバーである場合など)。

プロファイルを使用したくないので、カスタムMembershipProviderを使用することにしました(または、より良い、痛みの少ない方法を知っていますか?)。

私が理解できないのは、MembershipUserとMembershipです。 MembershipProviderから継承する場合、オーバーライドされたメソッドでは、データベースとの間のアクセスデータを制御します。

しかし、MembershipProviderから継承されたクラスを使用するにはどうすればよいですか? メンバーシップを使用してユーザーを認証する場合は、次を実行する必要があります。

if(Membership.ValidateUser(string username, string password))
{
   FormsAuthentication.RedirectFromLoginPage(string username, string password);
}

しかし、クラスはMembershipProviderから継承されますか?また、MembershipUserから継承されたクラスを使用する場合は?そして、MembershipとMembershipProviderの関係は何ですか?

役に立ちましたか?

解決

明確ではないが MSDNで、すべてではないその複雑。クラスが3つあります:

  • メンバーシップ:ユーティリティメソッドとエントリポイントを提供します-基本的にはシングルトン(静的クラス)です。
  • MembershipProvider:MembershipUserオブジェクトのデータアクセサおよびファクトリとして機能します。
  • MembershipUser:個々のユーザーを表します。

カスタムMembershipProviderは、アプリケーションの構成に基づいて(Membershipのコードによって)選択されます:configuration / system.web / membership。ここでプロバイダーを活用します。 MembershipProvider実装は、ユーザーが好みのデータストア(この場合はUserテーブル)にアクセスするように作成する必要があります。

MembershipUserオブジェクトは、MembershipProviderを介してのみ作成されます。 MembershipProvider.ValidateUser()メソッドは、ユーザー/パスワードの組み合わせが有効であることをデータストアに対してチェックする必要があります。 MembershipProvider.GetUser()はユーザー情報を取得します。アクセス保護されたページ内で使用し、現在の認証済みユーザーとしてSystem.Web.HttpContext.Current.User.Identity.Nameを渡します。

これは、プロファイルを使用し、個別のユーザーテーブルが必要です。既存の Active Directory または LDAP 対応のデータストアは、管理コストとおそらくセキュリティリスクを削減します。 MembershipProviderルートを使用する際に、間違えやすいことは何百もあります。 塩漬けハッシュを使用していますか? Userテーブルを操作からどのように保護していますか? MSDNは、セキュリティの問題のほんの一部しかカバーしていません。

他のヒント

使用される特定のプロバイダーはweb.configで制御されます。実際に複数のプロバイダーを設定し、デフォルトのプロバイダーを設定できます。チェック: http://msdn.microsoft.com/en-us/library/ 6e9y4s5t.aspx

そのように呼び出されると、メンバーシップはデフォルトのプロバイダーを使用します。ユーザーに追加情報を提供したい場合は、MembershipUserを継承しますが、それによりコードの残りの部分が特定のプロバイダーに結び付けられます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top