Skip to content

Startup Configuration

Shannon Deminick edited this page Dec 15, 2020 · 9 revisions

Normal OWIN startup configuration

//Single method to configure the Identity user manager for use with Umbraco
app.ConfigureUserManagerForUmbracoMembers<UmbracoApplicationMember>();

//Ensure owin is configured for Umbraco back office authentication
app.UseUmbracoBackOfficeCookieAuthentication(ApplicationContext.Current);

Custom OWIN startup configuration

Generally you can just use the default that is shipped but if you are extending or customizing/extending the user store/manager then you will need to use the 2nd overload.

There are a 2 overloaded methods for: ConfigureUserManagerForUmbracoMembers:

Default

This is the default one (used in above example) which just configures the default members user manager and user stores while allowing you to pass a custom implementation of UmbracoIdentityMember as the T type parameter if you need one. It also lets you pass in a custom membership provider but this would be very rare.

 public static void ConfigureUserManagerForUmbracoMembers<T>(this IAppBuilder app,
		ApplicationContext appContext = null,
		IdentityEnabledMembersMembershipProvider membershipProvider = null)
		where T : UmbracoIdentityMember, new()

Custom user store / user manager

A custom overload which is used if you want to supply your own custom UmbracoMembersUserStore This will be required if you are adding additional support to the user store implementation than what is shipped by default. For example, if you wanted to implement IUserLockoutStore, IUserPhoneNumberStore, IUserTwoFactorStore, etc... (see not implemented features for more info)

 public static void ConfigureUserManagerForUmbracoMembers<T>(this IAppBuilder app,
		UmbracoMembersUserStore<T> customUserStore,
		ApplicationContext appContext,
		IdentityEnabledMembersMembershipProvider membershipProvider = null)
		where T : UmbracoIdentityMember, new()

This is a complex method with callbacks because a user manager and therefore a user store are OWIN request scoped instances, meaning a new instance of each is created for each OWIN request. This is a requirement of ASP.NET Identity.

Example 1

This shows how you can have a custom user store while using the default user manager

app.ConfigureUserManagerForUmbracoMembers<UmbracoMembersUserManager<UmbracoApplicationMember>, UmbracoApplicationMember>(
    (options, owinCtx) =>
    {
        // Get the membership provider
        var membershipProvider = Membership.Providers["UmbracoMembershipProvider"] as IdentityEnabledMembersMembershipProvider;

        // Create the user store
        var userStore = new CustomUmbracoMembersUserStore<UmbracoApplicationMember>(
                Current.ProfilingLogger,
                Services.MemberService,
                Services.MemberTypeService,
                Services.MemberGroupService,
                membershipProvider,
                new ExternalLoginStore(Current.ScopeProvider));

        // Create the manager and initialize with default settings
        var manager = UmbracoMembersUserManager<UmbracoApplicationMember>.Create(options, userStore, membershipProvider);

        return manager;
    });

Example 2

This shows how you can have a custom user store and a custom user manager

app.ConfigureUserManagerForUmbracoMembers<CustomUmbracoMembersUserManager<UmbracoApplicationMember>, UmbracoApplicationMember>(
    (options, owinCtx) =>
    {
        // Get the membership provider
        var membershipProvider = Membership.Providers["UmbracoMembershipProvider"] as IdentityEnabledMembersMembershipProvider;

        // Create the user store
        var userStore = new CustomUmbracoMembersUserStore<UmbracoApplicationMember>(
                Current.ProfilingLogger,
                Services.MemberService,
                Services.MemberTypeService,
                Services.MemberGroupService,
                membershipProvider,
                new ExternalLoginStore(Current.ScopeProvider));

        // Create the manager
        var manager = new CustomUmbracoMembersUserManager<UmbracoApplicationMember>(userStore);

        // initialize it with the default settings
        CustomUmbracoMembersUserManager<UmbracoApplicationMember>.Configure(manager, membershipProvider, options);

        return manager;
    });