public async Task <User> Handle(Command request, CancellationToken cancellationToken)
            {
                var userInfo = await _facebookAccessor.FacebookLogin(request.AccessToken);

                if (userInfo == null)
                {
                    throw new RestException(HttpStatusCode.BadGateway, new { User = "******" });
                }

                var user = await _userManager.FindByEmailAsync(userInfo.Email);

                var token = "";

                if (user == null)
                {
                    user = new AppUser
                    {
                        DisplayName        = userInfo.Name,
                        Id                 = userInfo.Id,
                        Email              = userInfo.Email,
                        UserName           = "******" + userInfo.Id,
                        RefreshToken       = _jwtGenerator.GenerateRefreshToken(),
                        RefreshTokenExpiry = DateTime.UtcNow.AddDays(30)
                    };

                    //try create local user
                    token = _jwtGenerator.CreateToken(user);
                    var userCreated = await _userActivitiesApp.CreateUser(user.DisplayName, token);

                    if (!userCreated)
                    {
                        throw new RestException(HttpStatusCode.BadRequest, new { User = "******" });
                    }

                    var result = await _userManager.CreateAsync(user);

                    if (!result.Succeeded)
                    {
                        throw new RestException(HttpStatusCode.BadRequest, new { User = "******" });
                    }
                }

                if (token == "")
                {
                    token = _jwtGenerator.CreateToken(user);
                }

                return(new User
                {
                    Email = user.Email,
                    DisplayName = user.DisplayName,
                    Username = user.UserName,
                    Token = token,
                    RefreshToken = user.RefreshToken
                });
            }
            public async Task <User> Handle(Command request, CancellationToken cancellationToken)
            {
                if (await _context.Users.AnyAsync(x => x.Email == request.Email))
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Email = "Email already exists" });
                }

                if (await _context.Users.AnyAsync(x => x.UserName == request.Username))
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Username = "******" });
                }

                var user = new AppUser
                {
                    DisplayName        = request.DisplayName,
                    Email              = request.Email,
                    UserName           = request.Username,
                    RefreshToken       = _jwtGenerator.GenerateRefreshToken(),
                    RefreshTokenExpiry = DateTime.UtcNow.AddDays(30)
                };

                var token = _jwtGenerator.CreateToken(user);
                //try create local user
                var userCreated = await _userActivitiesApp.CreateUser(user.DisplayName, token);

                if (userCreated)
                {
                    var result = await _userManager.CreateAsync(user, request.Password);

                    if (result.Succeeded)
                    {
                        return(new User
                        {
                            Email = user.Email,
                            DisplayName = user.DisplayName,
                            Username = user.UserName,
                            Token = token,
                            RefreshToken = user.RefreshToken
                        });
                    }
                }

                throw new Exception("Problem creating user");
            }