c# asp.net asp.net-mvc-5 asp.net-identity

c# - Revocar token generado por UserTokenProvider en ASP.NET Identity 2.0



asp.net-mvc-5 asp.net-identity (1)

El UserTokenProvider predeterminado genera tokens basados ​​en SecurityStamp de los usuarios, por lo que hasta que eso cambie (como cuando cambia la contraseña del usuario), los tokens siempre serán los mismos y seguirán siendo válidos. Entonces, si simplemente quiere invalidar los tokens antiguos, simplemente llame al administrador.UpdateSecurityStampAsync ().

¿Hay alguna forma de revocar, por ejemplo, un token de confirmación de correo electrónico generado por un administrador de usuarios en ASP NET Identity 2.0?

Contexto
Me gustaría dar al usuario la posibilidad de reenviar un correo electrónico de confirmación. Para hacer esto, genero un nuevo token con: UserManager.GenerateEmailConfirmationTokenAsync(user.Id) , y envío un correo electrónico con el nuevo token generado. Desafortunadamente, cuando hago esto, los tokens generados anteriormente todavía funcionan, ¿hay alguna forma de revocarlos?

Código de ejemplo
En la clase UserManager:

manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(options.DataProtectionProvider.Create("ASP.NET Identity"));

En el AccountController:

var user = await UserManager.FindByEmailAsync("email"); // All generated tokens below will work to confirm the email. // I only want the last token to be valid when confirming the email address. var token1 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); var token2 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); var token3 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); var token4 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); var token5 = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); var result = await UserManager.ConfirmEmailAsync(user.Id, token5);

¡La información sobre la ubicación de almacenamiento del token generado y cómo se generan estos tokens también son bienvenidos!

Estaré agradecido si me puede enviar esta información.