ASP.NET身份2无效无双因素提供者存在

时间:2014-12-07 18:07:00

标签: asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity-2 two-factor-authentication

出于某种原因,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 个答案:

答案 0 :(得分:4)

确保您拥有用户的ConfirmedEmail。您可以在数据库中查找用户并查看EmailConfirmed标志以查看它是否已设置。

答案 1 :(得分:0)

由于我无法查看您的代码,因此无法提出正确的解决方案,但我可以告诉您我是如何做到的,一切顺利。当我尝试使用以下链接配置双向身份验证应用程序时,它变得非常方便和容易:

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

建议你尝试一下,如果你还没有。希望它有所帮助!