jueves, 9 de octubre de 2014

Obtener el id de usuario desde un token generado por la pagina PasswordReset de ASP.NET Identity 2.1

Antes de comenzar: ¿Que es ASP.NET Identity?

ASP.NET Identity es una de las grandes novedades de la nueva versión de ese gran paraguas de soluciones llamado ASP.NET, sustituyendo al viejo y querido sistema de Membership que venimos usando desde que salio allá por el año 2005. Esta diseñado para dar solución a muchos de los problemas y limitaciones que el sistema anterior tenia. Si quieren tener un análisis detallado del nuevo sistema, les recomiendo leer este post http://brockallen.com/2013/10/20/the-good-the-bad-and-the-ugly-of-asp-net-identity/ (Nota: no esta actualizado por lo que algún item mencionado como desventaja ya no aplica porque fue implementado en la ultima versión)

Presentado el tema, pasemos al problema.

La plantilla de Visual Studio 2013, viene con una pagina de OlvidoSuContraseña y otra RestablecerContraseña que te permiten realizar dichas tareas. 

El mecanismo para restablecer la contraseña que utilizamos en nuestro caso, es el envío de un link vía mail para restablecer la contraseña (hay que tener en cuenta que hay otras posibilidades)

Al entrar a la página de restablecimiento de contraseña, le vuelve a solicitar al usuario la dirección de mail! Evidentemente el que hizo esta plantilla, no tuvo en cuenta que ésto no es muy práctico desde el punto de vista usabilidad.

La idea para solucionar esto, es obtener del token el id de usuario que forma parte del mismo y a partir del mismo, obtener su dirección de mail y no tener que pedírselo de nuevo al usuario.


Manos a la obra!

1) Ubicar el archivo Startup.auth.cs ubicado en la carpeta App_Start y agregar las lineas de código que se muestran a continuación:



2) Ubicar el archivo ResetPassword.aspx ubicado en la carpeta Account y agregar las lineas de código que se muestran a continuación:






La magia la hace el método GetUserFromToken que utiliza el provider que definimos en el primer paso (ResetPasswordProtectionProvider).

Si querés saber mas acerca de Asp.Net Identityhttp://www.asp.net/identity

Espero que les sea de utilidad, hasta la próxima!