Пользовательский токен подтверждения электронной почты

Я использую платформу Identity 2.0 для управления пользователями.
К сожалению, в моем случае активация учетной записи/сброс пароля не может быть выполнена с использованием прямой ссылки, поэтому пользователю придется скопировать код из своей электронной почты и вставьте его на сайт.

Код, сгенерированный методом GenerateEmailConfirmationTokenAsync по умолчанию для UserManager, очень длинный, он занимает около 3 строк текста. Я попытался переопределить этот метод, сгенерировав более короткий код, более удобный для пользователя. Это не работает, так как метод ConfirmEmailAsync всегда возвращает "недопустимый токен" (этот метод вообще не вызывает метод GenerateEmailConfirmationTokenAsync).

Я не знаю, как хранится код подтверждения, и я предпочитаю использовать механизм хранения Identity Framework по умолчанию, а не хранить его вручную в базе данных.

Поскольку платформа Identity 2.0 имеет закрытый исходный код, я не уверен, что делать дальше. Можно ли генерировать собственные (более короткие) коды подтверждения и какие методы следует переопределить в дополнение к тому, что я уже сделал?


person Cloud    schedule 28.07.2014    source источник


Ответы (1)


ASP.NET Identity использует UserTokenProvider из UserManager для создания и проверки токена. В основном он вызывает:

this.UserTokenProvider.GenerateAsync("Confirmation", this, tUser);

сгенерировать токен и

this.UserTokenProvider.ValidateAsync("Confirmation", token, this, tUser);

чтобы проверить это.

Таким образом, вы можете реализовать свой собственный IUserTokenProvider<TUser, TKey> или расширить стандартный и установить его как UserManager.UserTokenProvider.

person Christoph Fink    schedule 28.07.2014