SimpleInjector и MVC Identity 2FA - PullRequest
       20

SimpleInjector и MVC Identity 2FA

0 голосов
/ 20 сентября 2018

После внедрения Simpleinjector, MVC Indentity TwoFactorAuthentication перестала работать.Я подозреваю, что это потому, что Simpleinjector не использует зарегистрированный экземпляр WiasApplicationUserManager, но создает новый, и поэтому инициализация теряется.

В Startup.Auth.cs У меня есть:

app.CreatePerOwinContext<WiasApplicationUserManager>(WiasApplicationUserManager.Create);
app.CreatePerOwinContext<WiasSignInManager>(WiasSignInManager.Create);

И в SimpleInjectorInitializer

private static void InitializeContainer(Container container)
    {
        container.Register<IUserStore<WiasApplicationUser, int>>(
            () => new WiasUserStore(), Lifestyle.Scoped);

        container.Register(
            () => new UserManager<WiasApplicationUser, int>(
                new WiasUserStore()), Lifestyle.Scoped);

        container.Register(() =>
                container.IsVerifying
                    ? new OwinContext().Authentication
                    : HttpContext.Current.GetOwinContext().Authentication,
            Lifestyle.Scoped);


        container.Register<IViewModel<UserViewModel>, UserViewModel>();
        container.Register<IViewModel<UsersViewModel>, UsersViewModel>();

        container.Register(typeof(ICommandHandler<>), typeof(ICommandHandler<>).Assembly);
        container.Register(typeof(IQueryHandler<,>), typeof(IQueryHandler<>).Assembly);
    }

TwoFactorProviders зарегистрированы в WiasApplicationUserManager.Create()

manager.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<WiasApplicationUser, int>
        {
            MessageFormat = "Your security code is {0}"
        });
        manager.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<WiasApplicationUser, int>
        {
            Subject = "Security Code",
            BodyFormat = "Your security code is {0}"
        });

Как я могу настроить это так, чтобы конфигурация, выполненная в WiasApplicationUserManager.Create(), не теряласькогда Simpleinjector вводит его в AccountController?

Я пытался:

container.Register<WiasSignInManager>(() =>
        {
            var cbase = new HttpContextWrapper(HttpContext.Current);
            return cbase.GetOwinContext().Get<WiasSignInManager>();
        });

Но cbase.GetOwinContext() возвращает ноль.

...