質問

現在、さまざまなユーザーがログインできるサイトがあり、サブドメインに応じて、さまざまなデータベースからのさまざまなデータが表示されます。この投稿の手順に従って、「一時」接続文字列を使用するように SqlMembershipProvider をオーバーライドしています。これは、Initialize メソッド中に動的に設定します。

http://forums.asp.net/p/997608/2209437.aspx

public override void Initialize(string name, NameValueCollection config)
    {
        // intercept the setting of the connection string so that we can set it ourselves...
        string specifiedConnectionString = config["connectionStringName"];

        ConnectionStringSettings connectionString = ConfigurationManager.ConnectionStrings[specifiedConnectionString];

        var fi = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

        fi.SetValue(connectionString, false);

        connectionString.ConnectionString = WakeflyClientHelper.GetClientConnectionStringByCurrentSubdomain();

        config["connectionStringName"] = connectionString.Name;

        // Pass doctored config to base classes
        base.Initialize(name, config);
    }

問題は、複数のユーザーが異なるサブドメインから接続すると、最終的に各ユーザーではなくデータベースの 1 つのユーザー アカウントが表示されるため、SqlMembershipProvider クラスが「静的」であるように見えることです。Initialize はリクエストごとではなく、アプリケーションによって呼び出されるように見えます。

そこで私からあなたへの質問は...これに対する解決策を実装する最も簡単な方法は何でしょうか?

これまでカスタム プロバイダーを作成したことがないため、それがどのように機能するのか、またどのような制限があるのか​​がわかりません。また、自分で作成すると、何かを見落とした場合にセキュリティ ホールが発生する可能性が常にあります (時間がかかることは言うまでもありません)。何か案は?

アップデート 1:データベースを 1 つだけ持つこともできますが、特定のサブドメイン内のユーザーは、他のサブドメインのユーザーを表示せずに、自分のサブドメイン内のユーザーを追加/編集/削除できる必要があります。この制度ではそれが可能でしょうか?

役に立ちましたか?

解決

SQLMembershipProvider のコードが提供されます ここ. 。プロジェクトをソリューションに追加し、web.config の名前空間参照を変更することで、必要と思われるものを拡張/変更できます。

他のヒント

私は、単一のメンバーシップ データベースを使用してすべてのログインを処理し、ログインしたドメインに応じて適切なデータベースにログインすることをまさに実行しました。

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