8

ユーザー データは、Users という MSSQL テーブルに格納します。私が望むのは、実際にログインしているユーザーのすべてのユーザー データ (メール、住所、電話、ユーザーが加入者の場合など) にアクセスできるようにすることです。

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

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

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

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

しかし、MembershipProvider から継承されたクラスはどこにあるのでしょうか。また、MembershipUser から継承されたクラスをいつ使用するのでしょうか? そして、Membership と MembershipProvider の関係は何ですか?

4

2 に答える 2

8

MSDNでは明確ではありませんが、それほど複雑ではありません。3 つのクラスがあります。

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

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

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

これは、 Profilesを使用したくないこと、そして本当に別の User テーブルが必要であることを確信していることを願っています。内部アプリケーションを作成している場合、既存のActive DirectoryまたはLDAP対応のデータ ストアを使用すると、管理コストが削減され、おそらくセキュリティ リスクが削減されます。MembershipProvider ルートに進むと、簡単に間違えてしまうことが何百もあります。ソルトハッシュを使用していますか? User テーブルを操作からどのように保護していますか? MSDN は、直面する可能性のあるセキュリティ問題のほんの一部しかカバーしていません。

于 2009-03-10T01:38:05.037 に答える
1

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

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

于 2009-03-09T21:55:39.427 に答える