5

Miałem aplikację, która była podłączona do 1 pojedynczej bazy danych.Zastąpienie Asp.net Ustawienia członkostwa w czasie wykonywania (asp.net mvc)

Aplikacja musi teraz podłączyć się do wielu baz danych. Chcemy to zrobić, używając tej samej aplikacji/domeny/nazwy hosta/wirtualnego katalogu, aby dać użytkownikowi opcję na ekranie logowania, aby wybrać "Aplikację/bazę danych", z którą chcą się połączyć.

Każda baza danych zawiera tabele aplikacji/dane/procs/etc oraz elementy członkostwa ASPNet/ról.

Gdy użytkownik wprowadzi nazwę użytkownika/hasło i wybierze (wybierz listę) aplikację, chcę zweryfikować użytkownika względem wybranej bazy danych aplikacji.

Obecnie ciąg połączenia z bazą danych dla usług członkowskich jest zapisywany w pliku web.config. Czy jest jakiś sposób, aby to zmienić podczas logowania? Potrzebuję również funkcji "zapamiętaj mnie", aby działać sprawnie. Jak to działa, gdy użytkownik wraca do aplikacji w ciągu 5 godzin ... Proces ten powinien być w stanie zidentyfikować użytkownika i aplikację i zalogować się odpowiednio.

Odpowiedz

5

Jedynym sposobem możliwe jest, aby zmienić ciąg conn za pośrednictwem refleksji:

// Set private property of Membership provider.FieldInfo connectionStringField 
= GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic); 
     connectionStringField.SetValue(this, connectionString); 

znaleźć tutaj: http://forums.asp.net/p/997608/2209437.aspx

Dlaczego nie wystarczy zaimplementować własną MembershipProvider? Bardzo łatwe do zrobienia, a następnie masz pełną kontrolę nad tym, co się dzieje. Na pewno wpadniesz na inny niestandardowy scenariusz, z którym domyślny dostawca nie będzie dobrze współpracować.

AFAIK Funkcja zapamiętaj mnie powinna działać dokładnie tak, jak opisujesz, o ile użytkownik nie usuwa plików cookie.

Powiązane problemy