Don't miss out Virtual Happy Hour this Friday (April 26).

Try our conversational search powered by Generative AI!

Loading...
ARCHIVED This content is retired and no longer maintained. See the latest version here.

Recommended reading 

Introduction

This section provides an information on how to use the AspNet Registrar in EPiServer Commerce. Refer to ASP.NET Identity for more information on to setup AspNet  identity. See below for a description of how to configure AspNet Identity Registrar.

Example

This configuration requires the following NuGet packages as dependency:

  • EPiServer.Commerce.Security
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 since asp.net identity methods are all async. Below is a example of 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);
        }

See also

Do you find this information helpful? Please log in to provide feedback.

Last updated: Oct 16, 2014

Recommended reading