miércoles, 18 de marzo de 2009

El control PasswordRecovery en .NET

En toda aplicación web que se precie es importante dar la posibilidad al usuario de poder acceder a su cuenta en caso de que haya olvidado su contraseña. El proceso de recuperación es el siguiente:
  • Se solicita al usuario su login (nombre de usuario)
  • Se le formula una pregunta de seguridad
  • Si la respuesta es correcta se le envía a su cuenta de correo su contraseña o una nueva con la acceder a su cuenta

En .net existe una clase que automatiza este proceso, PasswordRecovery. No obstante existe un problema asociado, y es que no vamos a poder hacer llegar el correo al usuario si nuestro servidor requiere de algún tipo de cifrado (protocolo SSL), ya que el control PasswordRecovery por defecto no utiliza el cifrado al enviar. Para solucionarlo debemos indicárselo.

Vayamos por partes:

  1. Lo primero que hay que hacer es configurar correctamente el cliente smtp. Si utilizas Visual Studio, ésto es muy sencillo: hay que seleccionar Definir configuración de correo electrónico en la pestaña Aplicación del menú Sitio Web -> Configuración de ASP.Net y ahí indicar los parámetros de nuestro correo smtp.

  2. Rellenar la propiedad From de PasswordRecovery con nuestra dirección de correo.

  3. Ahora debemos reescribir el método SendingMail de nuestro control para poder permitir el envío cifrado:

Protected Sub PasswordRecovery1_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles PasswordRecovery1.SendingMail
(1)Dim smtp As SmtpClient = New SmtpClient()
(2)smtp.EnableSsl = True
(3)smtp.Send(e.Message)
(4)e.Cancel = True
End Sub

El código esta en Visual Basic. En la primera línea creamos una nueva instancia del cliente smtp, en la línea dos activamos el envío con ssl y las líneas tres y cuatro simplemente se encargan de que el envío se realice como queremos y de evitar que se envíe dos veces el mismo correo.

Espero que os sea útil.

No hay comentarios:

Publicar un comentario