7

Aby przechowywać informacje o użytkowniku od osób, które logują się przy pomocy OpenID, planuję utworzyć tabelę użytkowników.Przechowywanie członkostwa ASP.net i otwieranie użytkowników w nowej tabeli użytkowników

Mój problem polega na tym, że ta nowa tabela użytkowników będzie zawierać nowe pola, które chcę, aby użytkownicy członkostwa asp.net również mogli wypełnić (dane profilu).

Mój plan jest taki, kiedy użytkownik chce nazwy użytkownika i hasła, rejestruje się, a informacje są wstawiane do asp.net_Membership, a następnie duplikują ich guid, nazwę użytkownika, createDate do nowej tablicy użytkowników, tak aby w kodzie mogłem po prostu wyszukać dane w tabeli użytkownika i nie ma znaczenia, czy zarejestrowano przy użyciu członkostwa OpenID lub asp.net.

Chciałbym przesłonić Membership.GetUser tak, aby wyszukał moją nową tabelę użytkowników i dodałbym właściwości profilu web.config.

byłoby lepsze osiągi zamiast korzystania Membership.GetUser użyć (gdzie nazwałbym nową tabelę użytkownika):

User user = _repository.GetUser(userId); 

Moja aplikacja już działa i chciałbym trzeba dodać odnośniki do niektórych strony obsługujące _repository, więc myślę tylko o wydajności.

Czy mój plan utworzenia nowej tabeli użytkowników jest prawidłowy? Nie podoba mi się pomysł duplikacji, ale jeśli w przyszłości chcę zmienić nazwę użytkownika, nie ma problemu z aktualizacją tabeli nowych użytkowników i tabeli asp.net_Membership.

Czy należy przesłonić GetUser i dodać właściwości profilu w pliku web.config lub wywołać mój własny obiekt użytkownika?

Czy tworzenie nowej tabeli użytkowników i powielanie podstawowych danych jest najlepszą metodą?

Odpowiedz

1

Nadpisanie członkostwa. Gracz z własną klasą uczyni go nieco bardziej ".Net" i prawdopodobnie będzie łatwiejszy dla kogoś innego. Nie zapominaj, że będziesz musiał zmodyfikować również zapisane procedury i widoki.

Chociaż jestem zdezorientowany, co jest nie tak z wbudowanym dostawcą Profilu? Gdy już masz nazwę użytkownika, po prostu "zadzwoń" Profile.GetProfileByUsername (nazwa użytkownika) i masz dostęp do "niestandardowych" atrybutów, których szukasz.

Jeśli niepokoi Cię korzystanie z aktualnego dostawcy profilu asp.net, ze względu na konieczność wysyłania zapytań/filtrowania/sortowania użytkowników. . .

Dlaczego nie używać dostawcy członkostwa i tabeli opartej (indywidualne kolumny dla każdej właściwości profilu) dostawcy profilu?

http://www.asp.net/downloads/sandbox/table-profile-provider-samples/

I wdrożone to na miejscu ja rozwiniętym, jedną z funkcji była możliwość „znaleźć” ludzie lubią siebie, pomyśl społecznościowych. Wymagało to pewnych modyfikacji, aby uzyskać pracę, ale świetnie się spisuje.

4

Utwórz nową tabelę, która odwzorowuje użytkownika dostawcaUżytkownika na użytkownika użytkownika OpenID. Kiedy użytkownik rejestruje się przy użyciu swojego OpenID, należy dodać mapowanie do tej nowej tabeli.Gdy użytkownik wróci do witryny i zaloguje się przy użyciu swojego OpenID, wyszukaj ich providerUserKey z tabeli mapowania. Użyj operatora providerUserKey, aby zalogować się przy użyciu ich operatora providerUserKey.

Takie podejście ma wiele zalet.

  1. Pozwala użytkownikowi zarejestrować się i zalogować przy użyciu nazwy użytkownika/hasła.
  2. Umożliwia użytkownikowi zarejestrowanie wielu identyfikatorów OpenID w swoim profilu.
  3. Tabela odwzorowań jest niezależna od reszty interfejsu API członkostwa, więc możesz ją zmienić w dowolny sposób, nie naruszając dostawcy.
  4. Tabela odwzorowania może być tak prosta, jak dwie kolumny z indeksem w kolumnie OpenID.

Możesz rozważyć rozszerzenie identyfikatora użytkownika OpenID, przekonwertowanie go na Guid i przechowywanie Guida zamiast pełnego adresu URL. Spowoduje to, że kolumna bazy danych o numerze & będzie mniejsza i szybsza.