Domanda

In un sito Web, devo integrare l'appartenenza e l'autenticazione. Quindi voglio usare la funzionalità dell'iscrizione ASP.NET, ma ho altre cose personalizzate, che un "utente" deve fare.

Quindi sono seduto qui con la mia matita e carta, disegnando linee per il mio modello di dominio ... E come posso utilizzare al meglio l'iscrizione ASP.Net, ma estenderla per soddisfare le mie esigenze?

Devo creare una classe che eredita da un MembershipUser ed estenderlo con le mie proprietà e i miei metodi (e salvarlo in una tabella separata). O dovrei lasciare che MembershipUser sia una proprietà sul mio oggetto Utente / Cliente personalizzato?

Quale sarebbe un buon modo solido per farlo?

È stato utile?

Soluzione

Ci ho pensato e ci sono 2 modi che sembrano appropriati (ovviamente ci sono altri modi per farlo funzionare).

Fornitore di appartenenze personalizzato

Modifichi il provider di appartenenze in modo che utilizzi il tuo e utilizzi l'oggetto Utente per memorizzare tutte le informazioni.

Il problema con questo è che comporta molta reimplementazione di cose che sono già ben gestite da Asp.Net. La cosa buona è che hai un singolo oggetto Utente con tutti i dettagli.

Collegamento da un utente di appartenenza al tuo utente

Con questo metodo, utilizzeresti il ??provider di appartenenze originale per gestire il nome utente e la password, ma colleghi il tuo oggetto Utente con questo con qualcosa come il nome utente usando ad esempio un servizio.

È davvero facile da configurare, devi solo creare un servizio che sarebbe usato in questo modo:

string userName = "Jon Skeet";
User user = new UserManagementServices().GetUserByUserName(userName);

Altri suggerimenti

Ho finito per scrivere il mio provider di appartenenza e l'ho implementato in 3 soluzioni separate ora. È estremamente semplice e molto, molto più elegante che collegare un utente a un utente di abbonamento (che ho anche provato).

Leggi questo ...:

Crea provider di appartenenza personalizzato per ASP.NET Sicurezza del sito web

E se vuoi saperne di più, guarda questo video (con codice sorgente) .

Ho esteso MembershipUser e ho creato la mia versione di SqlMembershipProvider per mappare il mio dominio esistente e ora funziona bene, in produzione.

MembershipUser è essenzialmente una vista sulla mia tabella utente. La mia classe estesa MembershipUser include proprietà di profilo / stile account invece di utilizzare il sistema SqlProfileProvider predefinito, che è un po 'fragile.

Non sono stato in grado di utilizzare le tabelle o gli sprocs di appartenenza esistenti, ma ho scritto il mio. Ad esempio, SqlMembershipProvider utilizza un GUID come chiave opaca, ma il sistema di produzione utilizza un semplice int vecchio. Tutte le date sono UTC, ecc.

Tutte le funzionalità extra dell'Utente sono accessibili tramite il dominio Utente non tramite i metodi di iscrizione.

HTH.

Attualmente sto lavorando tramite l ' API di iscrizione a Microsoft ASP.NET 2.0 Articolo esteso della rivista CoDe che spiega come estendere l'API di appartenenza scrivendo un wrapper attorno alle classi esistenti. Il vantaggio principale è che puoi mantenere tutte le funzionalità predefinite e non dover riscrivere le tue come faresti durante l'implementazione di un provider personalizzato. Viene fornito il codice sorgente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top