HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityDoc feedbackLog In
GitHubNuGetDev CommunityDoc feedback

ASP.NET Identity Registrar

Describes how to use the ASP.NET Identity Registrar in Optimizely Customized Commerce 13.



This configuration requires the *EPiServer.Commerce.Security* NuGet package as dependency.

See also: ASP.NET Identity.

using EPiServer.Commerce.Security;
    using EPiServer.Framework;
    using EPiServer.Framework.Initialization;
    using EPiServer.ServiceLocation;
    using EPiServer.Web;
    using log4net;
    using Microsoft.AspNet.Identity;
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Web.Routing;
    using System.Web.Security;
    namespace WebApplication1
        public class InitializeCommerceSiteModule : IConfigurableModule
            public void Initialize(InitializationEngine context)
            public void Preload(string[] parameters)
            public void Uninitialize(InitializationEngine context)
            public void ConfigureContainer(ServiceConfigurationContext context)
                context.Container.Configure(ce =>
                    ce.For<IRegistrar>().Singleton().Use(() => 
                      new IdentityRegistrar<ApplicationUser>(new ApplicationUserManager(new UserStore<ApplicationUser>(new ApplicationDbContext()))));

When using the ASP.NET Identity registrar with MVC, you need to make all action results async since all ASP.NET Identity methods are async. The following example shows this when creating a new user.

    public async Task Register(FormCollection model)
        if (ModelState.IsValid)
            string firstName = model["Email"];
            string lastName = model["Email"];
            string emailAddress = model["Email"];
            string password = model["Password"];
            var principal = await Task.Run(() => _registrar.CreateUser(emailAddress, password, emailAddress));
            // Now create an account in the ECF 
            CustomerContact customerContact;
            if (_registrar is CustomerContactRegistrar)
                customerContact = CustomerContext.Current.GetContactByUserId(
                  new MapUserKey(s => new ConvertStringUserKey()).ToTypedString(principal.Identity.Name));
                customerContact = CustomerContact.CreateInstance(principal);
            customerContact.FirstName = firstName;
            customerContact.LastName = lastName;
            customerContact.RegistrationSource = String.Format("{0}, {1}", this.Request.Url.Host, SiteContext.Current);
            customerContact["Email"] = emailAddress;
            await Task.Run(() =>_registrar.SignIn
                new AuthenticationProperties()
                    IsPersistent = false
                  principal.Identity as ClaimsIdentity
            return RedirectToAction("Index");
        // If we got this far, something failed, redisplay form
        return View(model);