私は任意の数のメンバーシッププロバイダーを使用する.Netアプリケーションを持っています。私はその理由については考えませんが、これらを事前設定したくないのですが、プログラムで作成して追加したいのです。これを行うためにとにかくありますか?私はプロバイダの作成に問題はありませんが、Membership.Providersは読み取り専用ですので、追加することはできません。プログラムでメンバーシッププロバイダーを追加する
答えて
まず、カスタムメンバーシッププロバイダ(ラッパーとして)を作成してweb.configにフックします。次に、このプロバイダーを実装して、実際のメンバーシッププロバイダーのリストに対してユーザーを認証できるようにします。
ラッパーはあなたが所有しているため、あなたの想像力によってのみ制限されます。私たちがしているので、
MyMembershipProvider provider = new MyMembershipProvider();
NameValueCollection config = new NameValueCollection();
// Configure your provider here. For example,
config["username"] = "myUsername";
config["password"] = "myPassword";
provider.Initialize("MyProvider", config);
// Add your provider to the membership provider list
provider.AddTo(Membership.Providers);
それはハックです:
public static class ProviderUtil
{
static private FieldInfo providerCollectionReadOnlyField;
static ProviderUtil()
{
Type t = typeof(ProviderCollection);
providerCollectionReadOnlyField = t.GetField("_ReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
}
static public void AddTo(this ProviderBase provider, ProviderCollection pc)
{
bool prevValue = (bool)providerCollectionReadOnlyField.GetValue(pc);
if (prevValue)
providerCollectionReadOnlyField.SetValue(pc, false);
pc.Add(provider);
if (prevValue)
providerCollectionReadOnlyField.SetValue(pc, true);
}
}
次に、あなたのコードでは、あなたがこのような何かを行うことができます。
後期、後期の答えは、しかし、あなたは、リフレクションを使用することができます反射を使用して "_ReadOnly"プライベートフィールドを設定しますが、動作するようです。 http://elegantcode.com/2008/04/17/testing-a-membership-provider/
もう一つの良いポスト:ここ
は、この問題についての素晴らしい記事だあなたは欠点を比較検討したいと思うよう http://www.endswithsaurus.com/2010/03/inserting-membershipprovider-into.html
は、これらの記事で_ReadOnlyを使用しての警告には特に注意してくださいあなたのプロジェクトの要件と達成しようとしているものとの間の読み取り専用コレクションを操作することです。
よろしく、
-Doug
私はそのすでに無関係を知っているが、将来の読者のために、私は同様の問題のために私の解決策を追加します。
他のプロバイダ(デコレータパターン)にいくつかの機能を追加するプロバイダを作成したかったので、内部プロバイダをプロバイダコレクションに追加したいと思っていました。プロバイダーがプロバイダーコレクションにない場合、ユーザーを作成できないためです)。
私は2つの理由で反射ソリューションを好きではなかった:
明白なものを - それはカプセル化を破ります。
コードはリフレクションパーミッションなしで実行する必要があります。それ以外の場合は、コード自体がプロバイダを追加できるため、セキュリティが侵害されます。
私が見つけた(簡単な)ソリューションは、両方のプロバイダをweb.configに登録し、デフォルトのプロバイダをプロバイダに設定し、プロバイダコレクションから実行時に2番目のプロバイダをロードすることでした。
最初の質問 - ランタイムの前に必要なプロバイダを知ることができれば、web.configでそれらを登録し、実行時にそのプロパティを変更する方がよいでしょう。
もう1つの解決方法(それでも「正しい」、しかし遅い)は、セキュリティチェックを小さなexeに委任し、アプリを変更することです。configを実行し、結果を出力として返します(プロバイダはこれを行うことができます)。 DPAPIはパスワード配信のセキュリティを提供できます。
- 1. プログラムでビューをプログラムに追加する
- 2. uilistboxにプログラムでプログラムを追加する
- 3. MVC - メンバーシッププロバイダーを取得する
- 4. AVCaptureVideoPreviewLayerでUIButtonをプログラムで追加する
- 5. ConstraintLayoutでプログラムでビューを追加する
- 6. UIScrollViewでUIBcuttonをプログラムで追加する
- 7. セキュリティが追加されたカスタムASP.NETメンバーシッププロバイダーが販売されていますか?
- 8. プログラムで追加されたビューにマージンを追加する
- 9. プログラムでWP7 ContextMenuを追加する
- 10. URLショートカットをプログラムで追加する
- 11. プログラムでリクエストをリストに追加する
- 12. プログラムでXMLにコメントを追加する
- 13. .net buttonコマンドでプログラムを追加する
- 14. プログラムでMessageQueueにメッセージを追加する
- 15. Winforms TableLayoutPanelプログラムで行を追加する
- 16. スタティックIPをプログラムで追加する
- 17. UITableViewにカスタムセルをプログラムで追加する
- 18. アクションバーメニュー項目をプログラムで追加する
- 19. プログラムでKeyBindingsコマンドを追加する
- 20. カスタムラジオグループをプログラムで追加する方法
- 21. プログラムでonClickをイメージビューに追加する
- 22. ボタンをプログラムでフラグメントに追加する
- 23. データアノテーションをプログラムで追加する
- 24. iPhone SDK - プログラムでUINavigationControllerを追加する
- 25. ワードプレス - プログラムでウィジェットを追加する
- 26. TabBarControllerをプログラムで追加する
- 27. プログラムでZedGraphを追加するには?
- 28. プログラムでstring.concatを追加する
- 29. ggplot2 - プログラムで要素を追加する
- 30. リニアレイアウトをプログラムで追加する
非常に役に立ちます。私はこれをカスタムメンバーシッププロバイダーの単体テストに使用しています。 – jsalwen
これは汚い、汚れたハックです...それは、それを使用して私の深い残念にもかかわらず、動作します。これありがとう。 – Deane