public async Task <IActionResult> Create([FromForm] AccountCreateRequest request)
        {
            if (request == null || string.IsNullOrWhiteSpace(request.UserName) || string.IsNullOrWhiteSpace(request.Password) || string.IsNullOrWhiteSpace(request.DisplayName))
            {
                return(BadRequest());
            }

            var user = await _userManager.FindByNameAsync(request.UserName);

            if (user == null)
            {
                user = new WingTipUser
                {
                    MigrationStatus = (int)MigrationStatus.New,
                    UserName        = request.UserName
                };

                var displayNameClaim = new IdentityUserClaim <string>
                {
                    ClaimType  = DisplayNameClaimType,
                    ClaimValue = request.DisplayName
                };

                user.Claims.Add(displayNameClaim);

                if (!string.IsNullOrEmpty(request.PlayerTag))
                {
                    var playerTagClaim = new IdentityUserClaim <string>
                    {
                        ClaimType  = PlayerTagClaimType,
                        ClaimValue = request.PlayerTag
                    };

                    user.Claims.Add(playerTagClaim);
                }

                // If the user does not exist, then creates the user in the SQL identity store with the Azure Active Directory-managed
                // password.
                await _userManager.CreateAsync(user, request.Password);
            }
            else
            {
                // If the user does exist, then update the password for the user in the SQL identity store to the Azure Active Directory-managed
                // password.
                await _userManager.SetPasswordAsync(user, request.Password);

                user.MigrationStatus = (int)MigrationStatus.MigratedWithPassword;
                await _userManager.UpdateAsync(user);
            }

            return(Ok(user));
        }
        public async Task <IActionResult> Create(CreateViewModel viewModel)
        {
            if (viewModel == null)
            {
                throw new ArgumentNullException(nameof(viewModel));
            }

            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }

            var user = new WingTipUser
            {
                MigrationStatus = (int)MigrationStatus.NotMigrated,
                UserName        = viewModel.UserName
            };

            var displayNameClaim = new IdentityUserClaim <string>
            {
                ClaimType  = WingTipClaimTypes.DisplayNameClaimType,
                ClaimValue = viewModel.DisplayName
            };

            user.Claims.Add(displayNameClaim);

            if (!string.IsNullOrEmpty(viewModel.PlayerTag))
            {
                var playerTagClaim = new IdentityUserClaim <string>
                {
                    ClaimType  = WingTipClaimTypes.PlayerTagClaimType,
                    ClaimValue = viewModel.PlayerTag
                };

                user.Claims.Add(playerTagClaim);
            }

            var createResult = await _userManager.CreateAsync(user, viewModel.Password);

            if (!createResult.Succeeded)
            {
                throw new InvalidOperationException(createResult.Errors.ToString());
            }

            return(RedirectToAction("Index"));
        }