I have migrated an existing Episerver site to ASP.Identity, pretty much following K Khans blogpost. The site is running newest version of Episerver. At first I was struggeling to get Episervers Identity implementation (using UIUserProvider, UIRoleProvider and UISignInManager) to work with Structure map. After explicit adding interfaces and abstract classes to Structure map config, I've got everything to work except validating a users password when creating or updating users in admin mode:
Unable to cast object of type 'Microsoft.AspNet.Identity.MinimumLengthValidator' to type 'Microsoft.AspNet.Identity.PasswordValidator'.
Stack trace:
at EPiServer.Cms.UI.AspNetIdentity.ApplicationUserProvider`1.get_MinRequiredPasswordLength() at EPiServer.UI.Edit.UserMembership.ValidatePassword() at EPiServer.UI.Edit.UserMembership.SaveMembershipUser(IEnumerable`1& errors)
at EPiServer.UI.Edit.UserMembership.SaveButton_Click(Object sender, EventArgs e)
I guess there is a simple solution to this, but I've already spent way too much time trying to make it work. Any help or suggestions are greatly appreciated.
Thanks in advance,
Tore.
From Structure map config:
x.For<ApplicationUserManager<ApplicationUser>>().Use<ApplicationUserManager<ApplicationUser>>().SetLifecycleTo<HybridLifecycle>();
x.For<ServiceAccessor<ApplicationUserManager<ApplicationUser>>>().Use(co => new ServiceAccessor<ApplicationUserManager<ApplicationUser>>(() => co.GetInstance<ApplicationUserManager<ApplicationUser>>()));
x.For<UIUserProvider>().Use<ApplicationUserProvider<ApplicationUser>>().SetLifecycleTo<HybridLifecycle>();
x.For<ServiceAccessor<UIUserProvider>>().Use(co => new ServiceAccessor<ApplicationUserProvider<ApplicationUser>>(() => co.GetInstance<ApplicationUserProvider<ApplicationUser>>()));
x.For<UIUserManager>().Use<ApplicationUIUserManager<ApplicationUser>>().SetLifecycleTo<HybridLifecycle>();
x.For<ServiceAccessor<UIUserManager>>().Use(co => new ServiceAccessor<ApplicationUIUserManager<ApplicationUser>>(() => co.GetInstance<ApplicationUIUserManager<ApplicationUser>>()));
x.For<UIRoleProvider>().Use<ApplicationRoleProvider<ApplicationUser>>().SetLifecycleTo<HybridLifecycle>();
x.For<ServiceAccessor<UIRoleProvider>>().Use(co => new ServiceAccessor<ApplicationRoleProvider<ApplicationUser>>(() => co.GetInstance<ApplicationRoleProvider<ApplicationUser>>()));
x.For<ApplicationRoleManager<ApplicationUser>>().Use<ApplicationRoleManager<ApplicationUser>>().SetLifecycleTo<HybridLifecycle>();
x.For<ServiceAccessor<ApplicationRoleManager<ApplicationUser>>>().Use(co => new ServiceAccessor<ApplicationRoleManager<ApplicationUser>>(() => co.GetInstance<ApplicationRoleManager<ApplicationUser>>()));
x.For<ApplicationRoleProvider<ApplicationUser>>().Use<ApplicationRoleProvider<ApplicationUser>>().SetLifecycleTo<HybridLifecycle>();
x.For<ServiceAccessor<ApplicationRoleProvider<ApplicationUser>>>().Use(co => new ServiceAccessor<ApplicationRoleProvider<ApplicationUser>>(() => co.GetInstance<ApplicationRoleProvider<ApplicationUser>>()));
x.For<IUserStore<ApplicationUser>>().Use<UserStore<ApplicationUser>>();
x.For<DbContext>().Use(() => new ApplicationDbContext<ApplicationUser>());
x.For<IAuthenticationManager>().Use(() => HttpContext.Current.GetOwinContext().Authentication);