Domanda

Archivo i dati dell'utente in una tabella MSSQL chiamata Users. Quello che voglio è avere tutti i dati dell'utente accessibili per l'utente effettivamente registrato (e-mail, indirizzo, telefono, se l'utente è abbonato ecc.).

Non voglio usare i profili, quindi ho deciso di utilizzare il MembershipProvider personalizzato (o conosci un modo migliore, meno doloroso?).

Quello che non capisco è MembershipUser e Membership. Se eredito da MembershipProvider, nei metodi overriden controllo i dati di accesso da e verso il database.

Ma come posso usare la classe ereditata da MembershipProvider? Se voglio autenticare l'utente utilizzando l'appartenenza, dovrei fare:

if(Membership.ValidateUser(string username, string password))
{
   FormsAuthentication.RedirectFromLoginPage(string username, string password);
}

Ma dove viene ereditata la classe da MembershipProvider? E quando utilizzare una classe ereditata da MembershipUser? E qual è la relazione tra Membership e MembershipProvider?

È stato utile?

Soluzione

Mentre non è cristallino su MSDN , non è tutto così complicato. C'è un trio di classi:

  • Appartenenza: fornisce metodi di utilità e un punto di ingresso - sostanzialmente un Singleton (classe statica).
  • MembershipProvider: funge da strumento di accesso ai dati e factory per gli oggetti MembershipUser.
  • MembershipUser: rappresenta un singolo utente.

È stato selezionato un MembershipProvider personalizzato (in base al codice in Membership) in base alla configurazione dell'applicazione: configuration / system.web / membership. Ecco dove metti in gioco il tuo provider. L'implementazione di MembershipProvider deve essere scritta per accedere a qualsiasi archivio di dati che preferisci per gli utenti: la tabella degli utenti in questo caso.

Gli oggetti MembershipUser vengono creati solo tramite MembershipProvider. Il metodo MembershipProvider.ValidateUser () dovrebbe verificare nell'archivio dati che la combinazione utente / password sia valida. MembershipProvider.GetUser () recupera le informazioni dell'utente: utilizzale all'interno di una pagina protetta dall'accesso e passa System.Web.HttpContext.Current.User.Identity.Name come utente autenticato corrente.

Detto questo, spero che tu sia sicuro di non voler usa i profili e vuoi davvero avere una tabella utente separata. Se stai scrivendo un'applicazione interna, utilizza un Active Directory o LDAP l'archivio dati abilitato ridurrebbe i costi di amministrazione e probabilmente i rischi per la sicurezza. Ci sono centinaia di cose che puoi facilmente sbagliare quando segui il percorso MembershipProvider. Usi hash salati ? Come proteggete la tabella degli utenti dalla manipolazione? MSDN copre solo una parte dei problemi di sicurezza che potresti incontrare.

Altri suggerimenti

Il provider specifico utilizzato è controllato su web.config. In realtà è possibile impostare più di 1 provider e averne uno predefinito. Controlla: http://msdn.microsoft.com/en-us/library/ 6e9y4s5t.aspx .

Se chiamato in questo modo, l'appartenenza utilizza solo il provider predefinito. Si erediterebbe MembershipUser, se si desidera fornire informazioni extra per l'utente, ma ciò legherà il resto del codice al proprio provider specifico.

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