HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket

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);