Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Recuperare le password

Come sfruttare il controllo PasswordRecovery, il web.config ed un server SMTP per inviare la password tramite e-mail
Come sfruttare il controllo PasswordRecovery, il web.config ed un server SMTP per inviare la password tramite e-mail
Link copiato negli appunti

Può succedere che un utente dimentichi la propria password, in realtà questo accade molto spesso, per cui c'è necessità di un metodo automatico per recuperare la password di un utente e fargliela avere.

Un modo per svolgere questo compito è quello di usare una domanda di sicurezza, alla quale solo l'utente sa rispondere e spedire password all'indirizzo e-mail fornito durante la registrazione. Anche la domanda e la relativa risposta vengono fornite dall'utente in fase di registrazione.

In ASP.NET 2.0, possiamo ottenere questo procedimento utilizzando il controllo PasswordRecovery. Realizziamo quindi un esempio in cui usiamo questo controllo partendo dal progetto realizzato nella lezione precedente.

Modifichiamo la pagina Login.aspx in modalità visuale e trasciniamo in essa un controllo PasswordRecovery

Figura 1. Inserire un controllo PasswordRecovery
Inserire un controllo PasswordRecovery

Inviare la password via e-mail

Dobbiamo adesso configurare la nostra applicazione affinché possa inviare delle e-mail. Apriamo quindi lo strumento di amministrazione applicazioni (WAT) ed andiamo alla sezione "Configurazione Applicazione". Clicchiamo su "Configura impostazioni posta SMTP".

Poi forniamo i parametri relativi al server SMTP che vogliamo usare. Naturalmente possiamo usare sia un server locale sia i parametri di un server remoto, ad esempio quelli che usiamo con il client della posta elettronica.

Figura 2. Impostare i parametri per l'SMTP
Impostare i parametri per l'SMTP

Salviamo le impostazioni e notiamo che nel Web.config è stato aggiunto un elemento <system.net>.

Listato 46. Modifiche al web config

<system.net>
 <mailSettings>
  <smtp from="redazione@html.it">
   <network host="smtp.mioserver.it" password="tootoooe" userName="ranux" />
  </smtp>
 </mailSettings>
</system.net>

Creiamo poi un account utente che conosciamo e che, nel test che faremo, riceverà la password tramite e-mail.

In caso di errore

In alcuni casi potremmo ottenere un messaggio di errore:

Compilation Error 
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS0246: The type or namespace name 'MailSettingsSection' could not be found (are you missing a using directive or an assembly reference?)

Source Error:

Line 45: 
Line 46:         Configuration config = OpenWebConfiguration(appPath);
Line 47:         MailSettingsSection netSmtpMailSection = (MailSettingsSection) config.GetSection("system.net/mailSettings");
Line 48: 
Line 49:         ServerNameTextBox.Text = netSmtpMailSection.Smtp.Network.Host;

Source File: c:WINDOWSMicrosoft.NETFrameworkv2.0.50215ASP.NETWebAdminFilesAppConfigSmtpSettings.aspx    Line: 47

Se accade è sufficiente Dobbiamo operare questi cambiamenti nel file

c:WINDOWSMicrosoft.NETFrameworkv2.0.50215ASP.NETWebAdminFilesAppConfigSmtpSettings.aspx

Alle linee 47 e 102, togliere la riga:

MailSettingsSection netSmtpMailSection = (MailSettingsSection) config.GetSection("system.net/mailSettings");

e sostituirla con:

MailSettingsSectionGroup netSmtpMailSection = (MailSettingsSectionGroup) config.GetSectionGroup("system.net/mailSettings");

Inviare la password in chiaro

Come abbiamo notato nella precedente lezione, la password immagazzinata nel database è codificata in modo da non poter essere letta da chi visualizza i dati o da potenziali hacker.

Questo va bene per motivi di sicurezza ma a noi serve spedire la password in chiaro. Dobbiamo fare in modo, quindi, che le password vengano memorizzate nel database senza subire alterazioni. In questo caso agiamo sul Web.config inserendo l'elemento <membership>

Listato 47. Memorizzare le password in chiaro

...

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="true"
enablePasswordReset="false"
requiresQuestionAndAnswer="true"
passwordFormat="Clear"
applicationName="Lezione31" />
</providers>
</membership>

</system.web>
...

Dopo che abbiamo operato questa modifica, aggiungiamo un nuovo utente con il WAT. Questo nuovo utente deve avere un'e-mail funzionante. Non usiamo gli utenti creati in precedenza poiché hanno delle e-mail inventate che non ci permettono di verificare l'invio delle password. Verifichiamo che la password sia memorizzata così come viene scritta, esaminando il contenuto del database con il Esplora Database.

Siamo adesso pronti per effettuare il nostro test. clicchiamo sulla Default.aspx e premiamo F5. Quindi clicchiamo su Login. Immaginiamo di aver dimenticato la password e mettiamo il nome utente nello spazio apposito:

Figura 3. Inserimento del nome utente
Inserimento del nome utente

Clicchiamo su "Invia" e rispondiamo alla domanda:

Figura 4. Risposta alla domanda di sicurezza
Risposta alla domanda di sicurezza

Otteniamo:

Figura 5. E-mail inviata
E-mail inviata

Verifichiamo sul browser della posta che l'e-mail è arrivata con la nostra password:

Figura 6. E-mail arrivata a destinazione
E-mail arrivata a destinazione

L'esempio realizzato nel corso di questa lezione può essere scaricato da qui.

Ti consigliamo anche