public override void Process(SignInArgs args)
        {
            try
            {
                // get current user
                string         username = args.User.InnerUser.Profile.Email;
                GetUserRequest request  = new GetUserRequest(username);
                GetUserResult  user     = _customerServiceProvider.GetUser(request);
                if (!user.Success || user.CommerceUser == null)
                {
                    // if user isn't a customer, run customer create pipeline
                    string            password          = Guid.NewGuid().ToString();
                    CreateUserRequest createUserRequest = new CreateUserRequest(username, password, username, _storefrontContext.CurrentStorefront.ShopName);
                    CreateUserResult  createUserResult  = _customerServiceProvider.CreateUser(createUserRequest);
                }

                // identify commerce user and merge anonymous cart
                Cart result = _cartManager.GetCurrentCart(_visitorContext, _storefrontContext, false).Result;
                Tracker.Current.CheckForNull().Session.IdentifyAs("CommerceUser", username);
                _visitorContext.UserJustLoggedIn();
                _cartManager.MergeCarts(_storefrontContext.CurrentStorefront, _visitorContext, _visitorContext.CustomerId, result);
            }
            catch (Exception ex)
            {
                // log error
                Sitecore.Diagnostics.Log.Error($"Failed to create a customer for external user login {args.User.UserName}. {ex.Message}", this);
            }
        }
예제 #2
0
        public ManagerResponse <GetUserResult, CommerceUser> GetUser(string userName)
        {
            Assert.ArgumentNotNullOrEmpty(userName, nameof(userName));

            var request = new GetUserRequest(userName);
            var result  = CustomerServiceProvider.GetUser(request);

            if (!result.Success || result.CommerceUser == null)
            {
                var message = DictionaryPhraseRepository.Current.Get("/System Messages/Account Manager/User Not Found Error", "The email address does not exists");
                result.SystemMessages.Add(new SystemMessage {
                    Message = message
                });
            }

            result.WriteToSitecoreLog();
            return(new ManagerResponse <GetUserResult, CommerceUser>(result, result.CommerceUser));
        }
        /// <summary>Gets the current user identifier.</summary>
        /// <returns>The user id to use to search for the carts.</returns>
        protected virtual string GetCurrentUserId()
        {
            string userName = CommerceTracker.Current.ContactUserName;

            if (Context.User.IsAuthenticated)
            {
                GetUserResult user = CustomerService.GetUser(new GetUserRequest(userName));
                if (user != null && user.Success && user.CommerceUser != null)
                {
                    userName = user.CommerceUser.ExternalId;
                }
            }
            else
            {
                userName = CommerceTracker.Current.ContactId;
            }
            return(userName);
        }