Hide menu Last updated: Oct 12 2015

The following examples show how to use the AspNet Identity Registrar in Episerver Commerce. See ASP.NET Identity

Note: This configuration requires the EPiServer.Commerce.Security NuGet packages as dependency.

C#
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
{
    [InitializableModule]
    [ModuleDependency(typeof(Mediachase.Commerce.Initialization.CommerceInitialization), typeof(EPiServer.Commerce.Initialization.InitializationModule))]
    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()))));
            });
        }
    }
}

One thing to note when using the asp.net identity registrar with mvc, you should make all your action results async because asp.net identity methods are all async. The following example shows this with creating a new user.

C#
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        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));
                }
                else
                {
                    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;

                customerContact.SaveChanges();
                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);
        }

Comments