ASP.NET Identity 2 Недопустимый двухфакторный поставщик не существует

По какой-то причине EmailCode не отображается в действительных двухфакторных провайдерах аутентификации. PhoneCode, однако, работал до тех пор, пока я его не удалил, теперь вообще ничего не появляется. Я отладил, и он отображается в UserManager, но по какой-то странной причине GetValidTwoFactorProvidersAsync не получает его. Я уже пытался добавить его вручную, минуя метод и извлекая значение вручную, но затем выдает сообщение об ошибке, что Microsoft.AspNet.Identity.EmailTokenProvider не существует. Я затрудняюсь объяснить, почему это не работает.

        public async Task<ActionResult> SendCode(string returnUrl)
        {
            var userId = await SignInManager.GetVerifiedUserIdAsync();
            if (userId == null)
            {
                return View("Error");
            }
            var userFactors = await UserManager.GetValidTwoFactorProvidersAsync(userId);
            var factorOptions = userFactors.Select(purpose => new SelectListItem { Text = purpose, Value = purpose }).ToList();
            return View(new SendCodeViewModel { Providers = factorOptions, ReturnUrl = returnUrl });
        }

Identityconfig

            manager.RegisterTwoFactorProvider("EmailCode", new Microsoft.AspNet.Identity.EmailTokenProvider<SystemUser>
                {
                    Subject = "SecurityCode",
                    BodyFormat = "Your security code is {0}"
                });

            manager.EmailService = new EmailService();
            var dataProtectionProvider = options.DataProtectionProvider;

            if (dataProtectionProvider != null)
            {
                manager.UserTokenProvider =
                    new DataProtectorTokenProvider<SystemUser>(
                        dataProtectionProvider.Create("ASP.NET Identity"));
            }
            return manager;
        }

2 ответа

Решение

Убедитесь, что у вас есть ConfirmedEmail для пользователя. Вы можете найти пользователя в базе данных и посмотреть флаг EmailConfirmed, чтобы увидеть, установлен он или нет.

Так как я не могу видеть ваши коды и, следовательно, не могу предложить правильное исправление, но я могу рассказать вам, как я это сделал, и все прошло хорошо. Это оказалось очень удобным и легким для меня, когда я попытался настроить приложение для двухсторонней аутентификации по следующим ссылкам:

http://www.asp.net/identity/overview/features-api/two-factor-authentication-using-sms-and-email-with-aspnet-identity

http://typecastexception.com/post/2014/04/20/ASPNET-MVC-and-Identity-20-Understanding-the-Basics.aspx

Предложите вам попробовать их, если вы еще этого не сделали. Надеюсь, поможет!

Другие вопросы по тегам