Condividi tramite


Sblocco e approvazione degli account utente (VB)

di Scott Mitchell

Nota

Poiché questo articolo è stato scritto, i provider di appartenenza ASP.NET sono stati sostituiti da ASP.NET Identity. È consigliabile aggiornare le app per usare la ASP.NET Identity Platform anziché i provider di appartenenza in primo piano al momento della scrittura di questo articolo. ASP.NET Identity offre numerosi vantaggi rispetto al sistema di appartenenza ASP.NET, tra cui :

  • Prestazioni migliori
  • Miglioramento dell'estendibilità e della testability
  • Supporto per OAuth, OpenID Connect e autenticazione a due fattori
  • Supporto delle identità basate sulle attestazioni
  • Interoperabilità migliore con ASP.Net Core

Questa esercitazione illustra come creare una pagina Web per gli amministratori per gestire gli stati bloccati e approvati degli utenti. Verrà anche illustrato come approvare nuovi utenti solo dopo aver verificato il proprio indirizzo di posta elettronica.

Introduzione

Insieme a un nome utente, una password e un messaggio di posta elettronica, ogni account utente ha due campi di stato che determinano se l'utente può accedere al sito: bloccato e approvato. Un utente viene bloccato automaticamente se forniscono credenziali non valide un numero di volte specificato entro un numero specificato di minuti (le impostazioni predefinite bloccano un utente dopo 5 tentativi di accesso non validi entro 10 minuti). Lo stato approvato è utile negli scenari in cui alcune azioni devono traspire prima che un nuovo utente sia in grado di accedere al sito. Ad esempio, un utente potrebbe dover prima verificare l'indirizzo di posta elettronica o essere approvato da un amministratore prima di poter accedere.

Poiché un utente bloccato o non autorizzato non può accedere, è naturale chiedersi come è possibile reimpostare questi stati. ASP.NET non include funzionalità predefinite o controlli Web per la gestione degli stati bloccati e approvati degli utenti, in parte perché queste decisioni devono essere gestite su base sito-by-site. Alcuni siti potrebbero approvare automaticamente tutti i nuovi account utente (comportamento predefinito). Altri utenti hanno un amministratore approvano nuovi account o non approvano gli utenti finché non visitano un collegamento inviato all'indirizzo di posta elettronica fornito durante l'iscrizione. Analogamente, alcuni siti possono bloccare gli utenti fino a quando un amministratore reimposta lo stato, mentre altri siti inviano un messaggio di posta elettronica all'utente bloccato con un URL che possono visitare per sbloccare il proprio account.

Questa esercitazione illustra come creare una pagina Web per gli amministratori per gestire gli stati bloccati e approvati degli utenti. Verrà anche illustrato come approvare nuovi utenti solo dopo aver verificato il proprio indirizzo di posta elettronica.

Passaggio 1: Gestione degli stati bloccati e approvati degli utenti

Nell'esercitazione Compilazione di un'interfaccia per selezionare un account utente da Molti è stata creata una pagina che elenca ogni account utente in una pagina filtrata GridView. La griglia elenca il nome e il messaggio di posta elettronica di ogni utente, i relativi stati approvati e bloccati, se sono attualmente online e tutti i commenti sull'utente. Per gestire gli stati approvati e bloccati degli utenti, è possibile modificare questa griglia. Per modificare lo stato approvato di un utente, l'amministratore individua prima l'account utente e quindi modifica la riga GridView corrispondente, controllando o deselezionando la casella di controllo approvata. In alternativa, è possibile gestire gli stati approvati e bloccati tramite una pagina di ASP.NET separata.

Per questa esercitazione si userà due pagine ASP.NET: ManageUsers.aspx e UserInformation.aspx. L'idea è che ManageUsers.aspx elenca gli account utente nel sistema, mentre UserInformation.aspx consente all'amministratore di gestire gli stati approvati e bloccati per un utente specifico. Il primo ordine aziendale consiste nell'aumentare GridView in ManageUsers.aspx per includere un HyperLinkField, che esegue il rendering come colonna di collegamenti. Si vuole che ogni collegamento punti a UserInformation.aspx?user=UserName, dove UserName è il nome dell'utente da modificare.

Nota

Se è stato scaricato il codice per l'esercitazione Ripristino e modifica password , potrebbe essere stato notato che la ManageUsers.aspx pagina contiene già un set di collegamenti "Gestisci" e la UserInformation.aspx pagina fornisce un'interfaccia per modificare la password dell'utente selezionato. Ho deciso di non replicare tale funzionalità nel codice associato a questa esercitazione perché ha funzionato aggirando l'API appartenenza e operando direttamente con il database SQL Server per modificare la password di un utente. Questa esercitazione inizia da zero con la UserInformation.aspx pagina.

Aprire la ManageUsers.aspx pagina e aggiungere un Oggetto HyperLinkField a UserAccounts GridView. Impostare rispettivamente la proprietà HyperLinkField Text su UserName "Manage" e le relative DataNavigateUrlFields proprietà e DataNavigateUrlFormatString su "UserInformation.aspx?user={0}". Queste impostazioni configurano HyperLinkField in modo che tutti i collegamenti ipertestuali visualizzino il testo "Gestisci", ma ogni collegamento passa il valore UserName appropriato nella querystring.

Dopo aver aggiunto HyperLinkField a GridView, passare un momento per visualizzare la ManageUsers.aspx pagina tramite un browser. Come illustrato nella figura 1, ogni riga gridView include ora un collegamento "Gestisci". Il collegamento "Gestisci" per Bruce punta a UserInformation.aspx?user=Bruce, mentre il collegamento "Gestisci" per Dave punta a UserInformation.aspx?user=Dave.

HyperLinkField aggiunge un oggetto

Figura 1: HyperLinkField aggiunge un collegamento "Gestisci" per ogni account utente (fare clic per visualizzare l'immagine full-size)

Verrà creata l'interfaccia utente e il codice per la UserInformation.aspx pagina in un momento, ma prima di tutto verrà illustrato come modificare a livello di codice gli stati bloccati e approvati di un utente. La MembershipUser classe ha IsLockedOutproprietà eIsApproved . La proprietà IsLockedOut è di sola lettura. Non esiste alcun meccanismo per bloccare a livello di codice un utente; per sbloccare un utente, usare il MembershipUser metodo della UnlockUserclasse. La IsApproved proprietà è leggibile e scrivibile. Per salvare tutte le modifiche apportate a questa proprietà, è necessario chiamare il Membership metodo della UpdateUserclasse, passando l'oggetto modificatoMembershipUser.

Poiché la proprietà è leggibile e scrivibile, un controllo CheckBox è probabilmente l'elemento IsApproved dell'interfaccia utente migliore per la configurazione di questa proprietà. Tuttavia, un controllo CheckBox non funzionerà per la IsLockedOut proprietà perché un amministratore non può bloccare un utente, può sbloccare solo un utente. Un'interfaccia utente adatta per la IsLockedOut proprietà è un pulsante che, quando si fa clic, sblocca l'account utente. Questo pulsante deve essere abilitato solo se l'utente è bloccato.

Creazione dellaUserInformation.aspxpagina

È ora possibile implementare l'interfaccia utente in UserInformation.aspx. Aprire questa pagina e aggiungere i controlli Web seguenti:

  • Un controllo HyperLink che, quando viene fatto clic, restituisce l'amministratore alla ManageUsers.aspx pagina.
  • Controllo Web etichetta per la visualizzazione del nome dell'utente selezionato. Impostare questa etichetta ID su UserNameLabel e cancellare la proprietà Text.
  • Controllo CheckBox denominato IsApproved. Impostare la proprietà AutoPostBack su True.
  • Controllo Etichetta per la visualizzazione dell'ultima data bloccata dell'utente. Assegnare un nome all'etichetta LastLockedOutDateLabel e cancellarne la Text proprietà.
  • Pulsante per sbloccare l'utente. Assegnare un nome a questo pulsante UnlockUserButton e impostarne la Text proprietà su "Sblocca utente".
  • Controllo Etichetta per la visualizzazione di messaggi di stato, ad esempio "Lo stato approvato dell'utente è stato aggiornato". Assegnare al controllo StatusMessageil nome , cancellare la Text proprietà e impostare la relativa CssClass proprietà su Important. (Il Important La classe CSS è definita nel Styles.css file del foglio di stile. Visualizza il testo corrispondente in un carattere rosso di grandi dimensioni.

Dopo aver aggiunto questi controlli, la visualizzazione Progettazione in Visual Studio dovrebbe essere simile alla schermata nella figura 2.

Creare l'interfaccia utente per UserInformation.aspx

Figura 2: Creare l'interfaccia utente per UserInformation.aspx (Fare clic per visualizzare l'immagine full-size)

Con il completamento dell'interfaccia utente, l'attività successiva consiste nell'impostare CheckBox IsApproved e altri controlli in base alle informazioni dell'utente selezionato. Creare un gestore eventi per l'evento della Load pagina e aggiungere il codice seguente:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     If Not Page.IsPostBack Then
          ' If querystring value is missing, send the user to ManageUsers.aspx
          Dim userName As String = Request.QueryString("user")
          If String.IsNullOrEmpty(userName) Then
               Response.Redirect("ManageUsers.aspx")
          End If

          ' Get information about this user
          Dim usr As MembershipUser = Membership.GetUser(userName)
          If usr Is Nothing Then
               Response.Redirect("ManageUsers.aspx")

          End If

          UserNameLabel.Text = usr.UserName
          IsApproved.Checked = usr.IsApproved

          If usr.LastLockoutDate.Year < 2000 Then
               LastLockoutDateLabel.Text = String.Empty
          Else
               LastLockoutDateLabel.Text = usr.LastLockoutDate.ToShortDateString()
               UnlockUserButton.Enabled = usr.IsLockedOut
          End If
     End If
End Sub

Il codice precedente inizia assicurandosi che si tratta della prima visita alla pagina e non di un postback successivo. Legge quindi il nome utente passato attraverso il user campo querystring e recupera informazioni sull'account utente tramite il Membership.GetUser(username) metodo . Se non è stato fornito alcun nome utente tramite querystring o se l'utente specificato non è stato trovato, l'amministratore viene inviato alla ManageUsers.aspx pagina.

Il MembershipUser valore dell'oggetto UserName viene quindi visualizzato nell'oggetto UserNameLabel e checkBox IsApproved viene selezionato in base al valore della IsApproved proprietà.

La MembershipUser proprietà dell'oggetto LastLockoutDate restituisce un DateTime valore che indica quando l'utente è stato bloccato. Se l'utente non è mai stato bloccato, il valore restituito dipende dal provider di appartenenza. Quando viene creato un nuovo account, il SqlMembershipProvideraspnet_Membership campo della LastLockoutDate tabella viene impostato su 1754-01-01 12:00:00 AM. Il codice precedente visualizza una stringa vuota nel LastLockoutDateLabel se la proprietà si verifica prima dell'anno 2000. In caso contrario, la LastLockoutDate parte data della LastLockoutDate proprietà viene visualizzata nell'etichetta. La UnlockUserButtonproprietà dell'utente Enabled è impostata sullo stato bloccato dell'utente, ovvero questo pulsante verrà abilitato solo se l'utente è bloccato.

Per testare la UserInformation.aspx pagina tramite un browser, prendere un momento. Naturalmente, è necessario iniziare e ManageUsers.aspx selezionare un account utente da gestire. Al termine dell'arrivo UserInformation.aspx, si noti che checkBox IsApproved viene controllato solo se l'utente è approvato. Se l'utente è mai stato bloccato, viene visualizzata l'ultima data bloccata. Il pulsante Sblocca utente è abilitato solo se l'utente è attualmente bloccato. Controllare o deselezionare IsApproved CheckBox o fare clic sul pulsante Sblocca utente causa un postback, ma non vengono apportate modifiche all'account utente perché è ancora necessario creare gestori eventi per questi eventi.

Tornare a Visual Studio e creare gestori eventi per l'evento IsApproved CheckBox e l'evento UnlockUserCheckedChangedClick Button. CheckedChanged Nel gestore eventi impostare la proprietà dell'utente IsApproved sulla Checked proprietà di CheckBox e quindi salvare le modifiche tramite una chiamata a Membership.UpdateUser. Click Nel gestore eventi chiamare semplicemente il MembershipUser metodo dell'oggettoUnlockUser. In entrambi i gestori eventi visualizzare un messaggio appropriato nell'etichetta StatusMessage .

Protected Sub IsApproved_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles IsApproved.CheckedChanged
     'Toggle the user's approved status
     Dim userName As String = Request.QueryString("user")
     Dim usr As MembershipUser = Membership.GetUser(userName)
     usr.IsApproved = IsApproved.Checked
     Membership.UpdateUser(usr)

     StatusMessage.Text = "The user's approved status has been updated."

End Sub

Protected Sub UnlockUserButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UnlockUserButton.Click
     'Unlock the user account
     Dim userName As String = Request.QueryString("user")
     Dim usr As MembershipUser = Membership.GetUser(userName)
     usr.UnlockUser()
     UnlockUserButton.Enabled = False

     StatusMessage.Text = "The user account has been unlocked."
End Sub

Test dellaUserInformation.aspxpagina

Con questi gestori eventi sul posto, rivedere la pagina e annullare l'applicazione di un utente. Come illustrato nella figura 3, verrà visualizzato un breve messaggio nella pagina che indica che la proprietà dell'utente IsApproved è stata modificata correttamente.

Chris è stato non approvato

Figura 3: Chris non è stato approvato (fare clic per visualizzare l'immagine a dimensione intera)

Quindi, disconnettersi e provare ad accedere come utente il cui account è stato appena non approvato. Poiché l'utente non è approvato, non può eseguire l'accesso. Per impostazione predefinita, il controllo Account di accesso visualizza lo stesso messaggio se l'utente non può accedere, indipendentemente dal motivo. Tuttavia, nell'esercitazione Convalida delle credenziali utente rispetto all'archivio utenti di appartenenza è stato esaminato il miglioramento del controllo Di accesso per visualizzare un messaggio più appropriato. Come illustrato nella figura 4, Chris viene visualizzato un messaggio che spiega che non può accedere perché il suo account non è ancora approvato.

Chris non può accedere perché il suo account non è approvato

Figura 4: Chris cannot login because his account is Unapproved (Fare clic per visualizzare l'immagine a dimensione intera)

Per testare la funzionalità bloccata, provare ad accedere come utente approvato, ma usare una password non corretta. Ripetere questo processo il numero di volte necessario fino a quando l'account dell'utente non è stato bloccato. Il controllo Login è stato aggiornato anche per visualizzare un messaggio personalizzato se si tenta di accedere da un account bloccato. Si sa che un account è stato bloccato dopo aver visualizzato il messaggio seguente nella pagina di accesso: "L'account è stato bloccato a causa di troppi tentativi di accesso non validi. Contattare l'amministratore per sbloccare l'account."

Tornare alla ManageUsers.aspx pagina e fare clic sul collegamento Gestisci per l'utente bloccato. Come illustrato nella figura 5, dovrebbe essere abilitato un valore nel LastLockedOutDateLabel pulsante Sblocca utente. Fare clic sul pulsante Sblocca utente per sbloccare l'account utente. Una volta sbloccato, l'utente sarà in grado di accedere di nuovo.

Dave è stato bloccato fuori dal sistema

Figura 5: Dave è stato bloccato fuori dal sistema (fare clic per visualizzare l'immagine a dimensione intera)

Passaggio 2: Specifica dello stato approvato dei nuovi utenti

Lo stato approvato è utile negli scenari in cui si vuole eseguire alcune azioni prima che un nuovo utente sia in grado di accedere e accedere alle funzionalità specifiche dell'utente del sito. Ad esempio, è possibile eseguire un sito Web privato in cui tutte le pagine, ad eccezione delle pagine di accesso e di iscrizione, sono accessibili solo agli utenti autenticati. Ma cosa succede se uno sconosciuto raggiunge il tuo sito Web, trova la pagina di iscrizione e crea un account? Per evitare che ciò accada, è possibile spostare la pagina di iscrizione in una Administration cartella e richiedere che un amministratore crei manualmente ogni account. In alternativa, è possibile consentire a chiunque di iscriversi, ma impedire l'accesso al sito finché un amministratore non approva l'account utente.

Per impostazione predefinita, il controllo CreateUserWizard approva i nuovi account. È possibile configurare questo comportamento usando la proprietà del DisableCreatedUsercontrollo. Impostare questa proprietà su True per non approvare nuovi account utente.

Nota

Per impostazione predefinita, il controllo CreateUserWizard accede automaticamente al nuovo account utente. Questo comportamento è determinato dalla proprietà del LoginCreatedUsercontrollo. Poiché gli utenti non approvati non possono accedere al sito, quando DisableCreatedUser è True il nuovo account utente non è connesso al sito, indipendentemente dal valore della LoginCreatedUser proprietà.

Se si creano nuovi account utente a livello di codice tramite il Membership.CreateUser metodo , per creare un account utente non approvato usare uno degli overload che accettano il valore della proprietà del IsApproved nuovo utente come parametro di input.

Passaggio 3: Approvazione degli utenti verificando l'indirizzo di Email

Molti siti Web che supportano gli account utente non approvano nuovi utenti fino a quando non verificano l'indirizzo di posta elettronica fornito durante la registrazione. Questo processo di verifica viene comunemente usato per contrastare bot, spammer e altri strumenti per la verifica, in quanto richiede un indirizzo di posta elettronica univoco e verificato e aggiunge un passaggio aggiuntivo nel processo di iscrizione. Con questo modello, quando un nuovo utente si iscrive viene inviato un messaggio di posta elettronica che include un collegamento a una pagina di verifica. Visitando il collegamento, l'utente ha dimostrato di aver ricevuto il messaggio di posta elettronica e, pertanto, che l'indirizzo di posta elettronica fornito è valido. La pagina di verifica è responsabile dell'approvazione dell'utente. Ciò può verificarsi automaticamente, approvando così qualsiasi utente che raggiunge questa pagina o solo dopo che l'utente fornisce alcune informazioni aggiuntive, ad esempio un CAPTCHA.

Per supportare questo flusso di lavoro, è necessario prima aggiornare la pagina di creazione dell'account in modo che i nuovi utenti non siano approvati. Aprire la EnhancedCreateUserWizard.aspx pagina nella Membership cartella e impostare la proprietà del DisableCreatedUser controllo CreateUserWizard su True.

Successivamente, è necessario configurare il controllo CreateUserWizard per inviare un messaggio di posta elettronica al nuovo utente con istruzioni su come verificare il proprio account. In particolare, verrà incluso un collegamento nel messaggio di posta elettronica alla Verification.aspx pagina (che è ancora stato creato), passando il nuovo utente UserId tramite la stringa di query. La Verification.aspx pagina cercherà l'utente specificato e le contrassegnerà approvate.

Invio di un Email di verifica a nuovi utenti

Per inviare un messaggio di posta elettronica dal controllo CreateUserWizard, configurarne la MailDefinition proprietà in modo appropriato. Come illustrato nell'esercitazione precedente, i controlli ChangePassword e PasswordRecovery includono una MailDefinition proprietà che funziona allo stesso modo del controllo CreateUserWizard.

Nota

Per utilizzare la MailDefinition proprietà è necessario specificare le opzioni di recapito della posta in Web.config. Per altre informazioni, vedere Invio di Email in ASP.NET.

Per iniziare, creare un nuovo modello di posta elettronica denominato CreateUserWizard.txt nella EmailTemplates cartella . Usare il testo seguente per il modello:

Hello <%UserName%>! Welcome aboard.

Your new account is almost ready, but before you can login you must first visit:
<%VerificationUrl%>

Once you have visited the verification URL you will be redirected to the login page.

If you have any problems or questions, please reply to this email.

Thanks!

Impostare la MailDefinitionproprietà 's BodyFileName su "~/EmailTemplates/CreateUserWizard.txt" e la relativa Subject proprietà su "Welcome to My Website! Attiva il tuo account."

Si noti che il CreateUserWizard.txt modello di posta elettronica include un <%VerificationUrl%> segnaposto. In questo caso verrà inserito l'URL della Verification.aspx pagina. CreateUserWizard sostituisce automaticamente i <%UserName%> segnaposto e <%Password%> con il nome utente e la password del nuovo account, ma non è presente alcun segnaposto predefinito <%VerificationUrl%> . È necessario sostituirlo manualmente con l'URL di verifica appropriato.

A tale scopo, creare un gestore eventi per l'eventoSendingMail CreateUserWizard e aggiungere il codice seguente:

Protected Sub NewUserWizard_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles NewUserWizard.SendingMail
     'Get the UserId of the just-added user
     Dim newUser As MembershipUser = Membership.GetUser(NewUserWizard.UserName)
     Dim newUserId As Guid = CType(newUser.ProviderUserKey, Guid)

     ' Determine the full verification URL (i.e., http://yoursite.com/Verification.aspx?ID=...)
     Dim urlBase As String = Request.Url.GetLeftPart(UriPartial.Authority) & Request.ApplicationPath
     Dim verifyUrl As String = "/Verification.aspx?ID=" + newUserId.ToString()
     Dim fullUrl As String = urlBase & verifyUrl

     ' Replace <%VerificationUrl%> with the appropriate URL and querystring

     e.Message.Body = e.Message.Body.Replace("<%VerificationUrl%>", fullUrl)
End Sub

L'evento SendingMail viene generato dopo l'evento CreatedUser , vale a dire che entro il momento in cui il gestore eventi precedente esegue il nuovo account utente è già stato creato. È possibile accedere al valore del UserId nuovo utente chiamando il Membership.GetUser metodo , passando l'oggetto UserName immesso nel controllo CreateUserWizard. Viene quindi creato l'URL di verifica. L'istruzione Request.Url.GetLeftPart(UriPartial.Authority) restituisce la parte dell'URL. Request.ApplicationPath Restituisce il http://yourserver.com percorso in cui l'applicazione è rooted. L'URL di verifica viene quindi definito come Verification.aspx?ID=userId. Queste due stringhe vengono quindi concatenate per formare l'URL completo. Infine, il corpo del messaggio di posta elettronica (e.Message.Body) ha tutte le occorrenze di <%VerificationUrl%> sostituite con l'URL completo.

L'effetto netto è che i nuovi utenti non sono approvati, vale a dire che non possono accedere al sito. Inoltre, vengono inviati automaticamente un messaggio di posta elettronica con un collegamento all'URL di verifica (vedere la figura 6).

Il nuovo utente riceve un Email con un collegamento all'URL di verifica

Figura 6: Il nuovo utente riceve un Email con un collegamento all'URL di verifica (fare clic per visualizzare l'immagine a dimensione intera)

Nota

Il passaggio predefinito createUserWizard del controllo CreateUserWizard visualizza un messaggio che informa che l'utente è stato creato e visualizza un pulsante Continua. Facendo clic su questa opzione, l'utente passa all'URL specificato dalla proprietà del ContinueDestinationPageUrl controllo. CreateUserWizard in EnhancedCreateUserWizard.aspx è configurato per inviare nuovi utenti a ~/Membership/AdditionalUserInfo.aspx, che richiede all'utente la propria città natale, l'URL della home page e la firma. Poiché queste informazioni possono essere aggiunte solo dagli utenti connessi, è opportuno aggiornare questa proprietà per inviare gli utenti alla home page del sito (~/Default.aspx). Inoltre, la EnhancedCreateUserWizard.aspx pagina o il passaggio CreateUserWizard deve essere aumentata per informare l'utente che è stato inviato un messaggio di posta elettronica di verifica e il relativo account non verrà attivato fino a quando non seguono le istruzioni in questo messaggio di posta elettronica. Lascio queste modifiche come esercizio per il lettore.

Creazione della pagina di verifica

L'attività finale consiste nel creare la Verification.aspx pagina. Aggiungere questa pagina alla cartella radice, associandola alla Site.master pagina master. Come è stato fatto con la maggior parte delle pagine di contenuto precedenti aggiunte al sito, rimuovere il controllo Contenuto che fa riferimento a LoginContent ContentPlaceHolder in modo che la pagina del contenuto usi il contenuto predefinito della pagina master.

Aggiungere un controllo Web Label alla Verification.aspx pagina, impostarlo IDStatusMessage su e cancellarne la proprietà text. Creare quindi il Page_Load gestore eventi e aggiungere il codice seguente:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     If String.IsNullOrEmpty(Request.QueryString("ID")) Then
          StatusMessage.Text = "The UserId was not included in the querystring..."
     Else
          Dim userId As Guid
          Try
               userId = New Guid(Request.QueryString("ID"))
          Catch
               StatusMessage.Text = "The UserId passed into the querystring is not in the proper format..."

               Exit Sub
          End Try

          Dim usr As MembershipUser = Membership.GetUser(userId)
          If usr Is Nothing Then
               StatusMessage.Text = "User account could not be found..."
          Else
               ' Approve the user
               usr.IsApproved = True
               Membership.UpdateUser(usr)
               StatusMessage.Text = "Your account has been approved. Please <a href=""Login.aspx"">login</a> to the site."

          End If
     End If
End Sub

La maggior parte del codice precedente verifica che l'Id utente fornito tramite la stringa di query esista, che sia un valore valido Guid e che faccia riferimento a un account utente esistente. Se tutti questi controlli vengono superati, l'account utente viene approvato; in caso contrario, viene visualizzato un messaggio di stato appropriato.

La figura 7 mostra la Verification.aspx pagina quando viene visitata tramite un browser.

L'account del nuovo utente è ora approvato

Figura 7: L'account del nuovo utente è ora approvato (fare clic per visualizzare l'immagine a dimensione intera)

Riepilogo

Tutti gli account utente di appartenenza hanno due stati che determinano se l'utente può accedere al sito: IsLockedOut e IsApproved. Entrambe queste proprietà devono essere True per consentire all'utente di accedere.

Lo stato di blocco dell'utente viene usato come misura di sicurezza per ridurre la probabilità di un hacker che si suddivide in un sito tramite metodi di forza bruta. In particolare, un utente viene bloccato se è presente un determinato numero di tentativi di accesso non validi entro un determinato intervallo di tempo. Questi limiti sono configurabili tramite le impostazioni del provider di appartenenze in Web.config.

Lo stato approvato viene comunemente usato come mezzo per impedire ai nuovi utenti di accedere fino a quando non si è verificata un'azione. Forse il sito richiede che i nuovi account vengano prima approvati dall'amministratore o, come illustrato nel passaggio 3, verificando il loro indirizzo di posta elettronica.

Buon programmatori!

Informazioni sull'autore

Scott Mitchell, autore di più libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, ha lavorato con le tecnologie Web Microsoft dal 1998. Scott lavora come consulente indipendente, allenatore e scrittore. Il suo ultimo libro è Sams Teach Yourself ASP.NET 2,0 in 24 Ore. Scott può essere raggiunto all'indirizzo mitchell@4guysfromrolla.com o tramite il suo blog all'indirizzo http://ScottOnWriting.NET.

Grazie speciali a...

Questa serie di esercitazioni è stata esaminata da molti revisori utili. Interessati a esaminare i prossimi articoli MSDN? In tal caso, lasciami una riga in mitchell@4GuysFromRolla.com