0

asp.net Web サイトで作業していますが、フォーム認証を使用してカスタム ロール プロバイダーを実装する際に問題が発生しています。

UserRoleID、EmployeeID、RoleID、および UserName フィールドを含む「UserRoles」テーブルを持つ SQL Server データベース「MyBase」があります。ユーザーがカスタム ログイン ページ (2 つのテキスト ボックス、ラベル、およびボタンのみ) を使用してログインするときに、このテーブルからユーザーのロールを取得したいと考えています。

いくつかの質問、シナリオ、および例を検索して読みましたが、まだどこかに欠けているものがあるため、支援を求めています。

私がこれまでに行ったこと:

web.config:

  • 認証モードをフォームに設定する
  • メンバーシップ プロバイダーの設定を行う
  • ロール プロバイダー設定の設定

次のカスタム クラスを作成し、サブ/関数/プロパティをリストしました。

  • RoleProvider --GetRolesForUser --IsUserInRole --ApplicationName
  • MembershipProvider --GetUser --UpdateUser --ValidateUser
  • メンバーシップユーザー

私のログインボタンで:

  1. ユーザーのパスワードを暗号化します。
  2. MemProv.ValidateUser(txt_username.Text, encrypedPW)true または false を正しく返すカスタム MembershipProviders の ValidateUser を呼び出します。
  3. 電話FormsAuthentication.SetAuthCookie(txt_username.Text, False)
  4. カスタム RoleProvider の GetRolesForUser 関数を呼び出します。RoleProv.GetRolesForUser(txt_Username.Text)これは String() またはロールを正しく返します。

User.Identity を確認すると、isAuthenticated = false および Name = "" です。

IIdentity や IPrincipal の実装が欠落していると確信していますが、それらをどこにどのように実装するかはわかりません。

だから私の質問は:

  1. 作成した SQL Server テーブルにロールを保持するためだけに、これらすべてを実行する必要がありますか?

  2. IIDentity と IPrincipal を組み込む必要がありますか? もしそうなら、どのように、またはどこでそれを行うのですか?

4

2 に答える 2

0

IPrincipal と IIdentity を実装する 2 つのクラスを作成しました。

プリンシパルの IsInRole 関数で、カスタム RoleProvider の IsUserInRole 関数を呼び出します。

カスタム ログイン ページを使用してログインすると、正しいフォームにリダイレクトされました。Identity と RolePrincipal の両方に正しい情報が含まれています。

于 2014-06-06T12:44:15.637 に答える