In questo articolo vediamo come permettere la registrazione di un nuovo utente. Vediamo come generare automaticamente la pagina mediante il controllo CreateUserWizard
e come crearne a mano una personalizzata aggiungendo qualche riga di codice.
Il CreateUserWizard
Il CreateUserWizard
è il controllo di ASP.NET 2.0 che consente di creare un nuovo utente mediante l'immissione di informazioni tramite un form generato automaticamente. Oltre a generare automaticamente il form, il controllo si assume il compiti di verificare la password e l'e-mail inserita ed aggiunge l'utente al Membership Provider specificato con il WAT.
Per comprenderne meglio il funzionamento, realizziamo un esempio e ci basiamo sull'applicazione creata in un articolo precedente che possiamo scaricare da qui e rinominare "CreareNuovoUtente".
Quindi nel progetto "CreareNuovoUtente" aggiungiamo un Web Form di nome NuovoUtente.aspx
. Nella modalità visuale di NuovoUtente.aspx
trasciniamo un controllo CreateUserWizard
prelevandolo dalla sezione Accesso (Login) della casella degli struementi.
Personalizziamo poi a piacere il CreateUserWizard
scegliendo lo schema della formattazione automatica che ci piace di più, impostiamo, tramite la finestra delle proprietà, la pagina di destinazione dell'avvenuta registrazione e rendiamo visibile il tasto "Annulla".
ContinueDestinationPageUrl="~/Default.aspx" DisplayCancelButton="True"
Poiché il CreateUserWizard
si connette automaticamente al Membership Provider dell'applicazione, il nostro lavoro è finito e possiamo fare un test linkando la nuova pagina alla Login.aspx
.
Clicchiamo quindi su Crea Utente
ed otteniamo il messaggio:
Possiamo verificare che l'utente viene realmente creato mediante il WAT.
Form personalizzato
Realizziamo ora una pagina di creazione nuovo utente personalizzata, senza usufruire del controllo CreateUserWizard
.
Chiamiamo la pagina AggiungiUtente.aspx
e realizziamola come in figura 3.
La pagina è realizzata mediante una tabella 2x7, in cui nella prima colonna sono messe le descrizioni delle caselle di testo presenti nella seconda colonna. C'è poi un'etichetta che serve a visualizzare un messaggio in rosso, un link alla pagina di Login
ed un pulsante Aggiungi Utente
.
Nella modalità visuale di AggiungiUtente.aspx
, clicchiamo due volte sul pulsante per programmare il metodo che gestisce il click nel codice.
Listato 1. Codifica di ButtonAggiungiUtente_Click
protected void ButtonAggiungiUtente_Click(object sender, EventArgs e)
{
MembershipCreateStatus status;
try
{
if (TextBoxPassword.Text == TextBoxPasswordConf.Text)
{
MembershipUser newUser = Membership.CreateUser(TextBoxUserId.Text, TextBoxPassword.Text, TextBoxEmail.Text, TextBoxQuestion.Text, TextBoxAnswer.Text, true, out status);
if (newUser == null)
Msg.Text = GetErrorMessage(status);
else
Msg.Text = "L'utente " + newUser.UserName + " è stato creato. Effettuare il Login.";
}
else
Msg.Text = "Le password inserite non coincidono.";
}
catch
{
Msg.Text = "Si è verificata un'eccezione.";
}
}
Innanzitutto definiamo la variabile status
di tipo MembershipCreateStatus
che ci sarà utile per verificare lo stato di creazione dell'utente.
Verifichiamo poi che il contenuto delle caselle di testo della password e della conferma password coincidano. Se questo non si verifica mandiamo un messaggio ed usciamo dal metodo.
Se le password sono uguali tentiamo di creare l'utente passando i parametri al metodo CreateUser
della classe Membership
.
Da notare il parametro out status
nella riga in rosso: la variabile status
non è inizializzata ed il metodo ce la restituisce con l'informazione sullo stato di creazione dell'utente.
Il valore true
invece indica che l'utente viene subito autorizzato ad accedere al sistema, cioè può effettuare il login. Mettendo false
creeremmo un utente non attivo, da attivare in seguito con il WAT.
Testiamo poi se l'utente non è stato creato per una qualche ragione. In questo caso mandiamo un messaggio decodificando la variabile status
per mezzo del metodo GetErrorMessage
che dobbiamo implementare.
Se viene lanciata un'eccezione, catturiamola e mandiamo il relativo messaggio.
Implementiamo quindi il metodo GetErrorMessage
che serve a restituire le informazioni immagazzinate nella variabile status
, che è una enumerazione, durante il processamento del metodo CreateUser
.
Listato 2. GetErrorMessage
public string GetErrorMessage(MembershipCreateStatus status)
{
switch (status)
{
case MembershipCreateStatus.DuplicateUserName:
return "Nome utente già presente. Inserirne uno differente.";
case MembershipCreateStatus.DuplicateEmail:
return "Un utente con questa e-mail già esiste. Inserire un altro indirizzo e-mail.";
case MembershipCreateStatus.InvalidPassword:
return "Password non valida. Inserirne una valida.";
case MembershipCreateStatus.InvalidEmail:
return "Indirizzo e-mail non valido. Inserirne uno valido e riprovare.";
default: return "Si è verificato un errore sconosciuto. Se il problema persiste contattare l'amministratore.";
}
}
Non commentiamo il listato che è abbastanza leggibile. È da notare che, per semplicità, il caso default
resituisce l'errore generico anche per i casi che non sono stati presi in considerazione.
Verifichiamo ora che la nuova pagina funzioni.
Effettuiamo poi il Login per verificare che l'utente appena creato esista veramente e sia attivo, cioè possa accedere al sistema.
L'esempio realizzato in questo articolo, privato del database perché troppo grande, può essere scaricato da qui.