ASP.Net Identity 2 Сброс пароля с помощью SMS

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

Я хочу сгенерировать код безопасности, отправить его пользователю, затем он должен ввести его в форму, а затем ему будет разрешено сбросить свой пароль. Может ли кто-нибудь направить меня к руководству/учебнику, объясняющему этот процесс?


person Swifty    schedule 02.06.2014    source источник
comment
Обзор «Двухфакторная аутентификация». Шаблон по умолчанию имеет двух поставщиков, зарегистрированных в IdentityConfig.cs.   -  person jd4u    schedule 03.06.2014
comment
Он говорит о сбросе пароля, а не о двухфакторной аутентификации. Сгенерированные токены для сброса пароля слишком длинные, чтобы попросить пользователя ввести их. Ни в одном учебнике или шаблоне, который я нашел до сих пор, нет ничего, что показывало бы процесс использования sms для сброса пароля.   -  person Precious Roy    schedule 18.07.2014


Ответы (1)


Покопавшись в исходном коде идентификации, я нашел альтернативного поставщика токенов, который может генерировать токены, аналогичные подтверждению номера телефона (шесть цифр).

Мне пришлось реализовать два метода в моем UserManager, чтобы сгенерировать код, а затем проверить его.

Я объявил поставщика токенов внутри UserManager

private TotpSecurityStampBasedTokenProvider<User, string> smsResetTokenProvider = new TotpSecurityStampBasedTokenProvider<User, string>();

Это первый метод генерации кода:

public async Task<string> GenerateSMSPasswordResetToken(string userId)
    {
        var user = await base.FindByIdAsync(userId);
        var token = await smsResetTokenProvider.GenerateAsync("Reset Password", this, user);
        return token;
    }

Это второй метод проверки кода:

public async Task<IdentityResult> SMSPasswordResetAsync(string userId, string token, string newPassword)
    {
        var user = await base.FindByIdAsync(userId);
        var valid = await smsResetTokenProvider.ValidateAsync("Reset Password", token, this, user);
        if (valid)
        {
            var passwordStore = Store as IUserPasswordStore<User, string>;

            var result = await UpdatePassword(passwordStore, user, newPassword);
            if (!result.Succeeded)
            {
                return result;
            }
            return await UpdateAsync(user);
        }
        else
        {
            return IdentityResult.Failed("InvalidToken");
        }
    }

Возможно, вам придется настроить код в зависимости от вашего менеджера пользователей.

person Souhaieb Besbes    schedule 16.12.2015
comment
вы можете увидеть мой вопрос, пожалуйста: https://stackoverflow.com/questions/44243574/how-use-totpsecuritystampbasedtokenprovider-in-asp-net-identity-4 - person pejman; 29.05.2017
comment
Ваш ответ наиболее точен на этот вопрос, но я получаю это исключение: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.TotpSecurityStampBasedTokenProvider1` при попытке активировать контроллер. Моя реализация: private readonly TotpSecurityStampBasedTokenProvider<ApplicationUser> _smsProvider; - person Dev; 02.03.2020