Отменить токен, созданный UserTokenProvider в ASP.NET Identity 2.0
Есть ли способ отменить, например, токен конформации электронной почты, сгенерированный usermanager в ASP NET Identity 2.0?
Контекст
Я хотел бы дать пользователю возможность отправить подтверждение по электронной почте. Для этого я создаю новый токен с помощью UserManager.GenerateEmailConfirmationTokenAsync(user.Id)
и отправлю электронное письмо с новым сгенерированным токеном. К сожалению, когда я делаю это, ранее созданные токены все еще работают, есть ли способ их отменить?
Пример кода
В классе UserManager:
manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(options.DataProtectionProvider.Create("ASP.NET Identity"));
В 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);
Информация о месте хранения сгенерированного токена и способах создания этих токенов также приветствуется!
Буду признателен, если вы пришлете мне эту информацию.
Ответы
Ответ 1
Пользователь UserTokenProvider по умолчанию генерирует токены на основе пользователей SecurityStamp, поэтому до тех пор, пока изменения (например, когда пароль пользователя не изменится), токены всегда будут одинаковыми и останутся действительными. Поэтому, если вы хотите просто аннулировать старые токены, просто вызовите manager.UpdateSecurityStampAsync().