8

Tworzę witrynę ASP.NET MVC.Gdzie przechowywać dodatkowe dane użytkownika przy użyciu ASP.NET MVC i SqlMembershipProvider?

Ma dość złożoną stronę rejestracji użytkownika z dużą ilością pól. Moje pytanie brzmi: gdzie powinienem to utrzymywać? Tabele użytkownika utworzone przez narzędzie dostawca członkostwa nie zawierają tych kolumn i nie mam pojęcia, jaka jest najlepsza praktyka pod względem przechowywania tych dodatkowych informacji o każdym z użytkowników?

Czy to jest miejsce, w którym wchodzi dostawca profili? Jak oni pracują? Jeśli nie, to w jaki inny sposób można przechowywać i przechowywać dodatkowe informacje o użytkowniku, które nie zostały podane w kolumnach zasobów tabel MembershipProvider?

Czy ktoś może wskazać mi niektórych zasobów, w jaki sposób ten jest obsługiwany, jak uzyskać dostęp do tych dodatkowych dane użytkownika, kiedy ich potrzebujesz, jak utworzyć nowego użytkownika z wszystkich tych informacji itp

Odpowiedz

3

Jest to miejsce, w którym dostępny jest dostawca profilu ASP.NET. Można go użyć do przechowywania informacji o profilu, które użytkownik potrzebuje. Wszystko, co musisz zrobić, to dodać potrzebne pola w pliku web.config, MSDN Link on how to configure the profile fields in web.config file. Aby podsumować artykuł, wystarczy dodać nazwę i wartości typu, które chcesz zapisać, do węzła właściwości elementu profilu. Oto przykład:

<profile enabled="true"> 
    <properties> 
    <add name="Name" /> 
    <group name="Address"> 
     <add name="Street" /> 
     <add name="City" /> 
     <add name="Zip" type="System.Int32" /> 
    </group> 
    </properties> 
</profile> 

w ASP.NET Webforms, Visual Studio automagicznie tworzy silnie wpisany klasy profilu, która będzie odwoływać niestandardowe właściwości profilu. W MVC tak się nie dzieje. Aby odwołać się do informacji o profilu użytkownika, wystarczy wywołać HttpContext.Profile ["PropertyName"]. Przykład:

HttpContext.Profile["Name"] = name; 
HttpContext.Profile.GetProfileGroup("Address")["Zip"] = zip; 

Edit: Jak zauważył Andy, używając domyślnego SqlProfileProvider naprawdę nie jest dobre, jeśli chcesz uruchomić zapytań na temat tych właściwości. Ma całkowitą rację i być może powinienem był początkowo zauważyć to ograniczenie. To ograniczenie istnieje, ponieważ SqlProfileProvider przechowuje wszystkie dane profilu w trzech kolumnach: PropertyNames i PropertyValuesString/PropertyValuesBinary. Wszystkie klucze są przechowywane w polu PropertyNames, wartości, które można zapisać jako ciąg, są przechowywane w polu PropertyValuesString itp. Oznacza to, że niezwykle trudno jest wykonać zapytanie typu "Wybierz * z aspnet_Profile, w którym wiek> 10".

3

Nie jestem pewien, czy istnieje najlepsza praktyka i tak naprawdę zależy od tego, w jaki sposób chcesz wykorzystać te informacje.

Po pierwsze, musisz rozpoznać członkostwo, a profile to dwie osobne rzeczy. Funkcja członkostwa, profilu i roli ASP.NET została zaprojektowana jako usługa, obsługująca wiele witryn/aplikacji.

Jeśli spojrzysz na schemat tych relacji, zauważysz, że użytkownicy są unikalni dla systemu, ale użytkownik może być współużytkowany przez różne aplikacje. Oznacza to, że ich informacje o profilu są również przekazywane do różnych aplikacji. Członkostwo to w rzeczywistości powiązanie użytkownika z aplikacją i zawiera informacje o ich związku z konkretną aplikacją (hasło, hasło Q & A, itp.).

Możesz użyć dostawcy profilu, zgodnie z sugestią Ryana, ale 1) informacje te nie są łatwo wyszukiwane, jeśli chcesz zebrać dane profilu i 2) są one udostępniane wszystkim użytkownikom usług członkostwa/profilu. Możesz jednak rozszerzyć go, aby spełnić Twoje potrzeby.

Możesz rozszerzyć dostawcę członkostwa, zgodnie z sugestią Gortoka, i że informacje będą dotyczyły aplikacji, ale musisz upewnić się, że nie naruszysz istniejących klientów usługi, modyfikując istniejące procedury lub tabele przechowywane w taki sposób, zmienia ich interfejs lub intencję.

Inną opcją jest potraktowanie jej jako usługi i śledzenie tych informacji we własnym zakresie, odwołując się do implementacji własnego profilu za pomocą identyfikatora użytkownika z dostawcy asp.net sql.

Jest dobra seria (16 części) na Membership, Profiles, and Roles na 4 Guys z firmy Rolla, którą polecam lekturę, a następnie, po zapoznaniu się z wszystkimi ruchomymi częściami, dokonaj świadomej decyzji, gdzie najlepiej przechowywać i jak najlepiej uporządkować informacje o profilu, które chcesz utworzyć.

2

Wiem, że ten post został opublikowany przez długi czas, a kontekst pytań był prawdopodobnie dla mvc2 lub wcześniej.

To jest teraz mvc3, i pomyślałem, że być może inni zainteresowani rozwiązaniem tego problemu będą zainteresowani kontekstem mvc5.

W standardowym projekcie mvc5 że posiada indywidualne konto użytkownika enabled znajdziesz następujący blok kodu gotowy do użycia w {} Projektu /Models/IdentityModel.cs

// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. 
public class ApplicationUser : IdentityUser 
{ 
} 

Wystarczy dodać w kilku właściwości tego klasa i właściwości zostaną utrwalone w bazie danych Np.

public class ApplicationUser : IdentityUser 
{ 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Email { get; set; } 
     public bool Active { get; set; } 
     public DateTime DateRegistered { get; set; } 
} 
Powiązane problemy