public async Task <DbUserClient> Login(string emailAddress, string password)
        {
            var dbUser = await _context.DbUsers.Where(x => x.EmailAddress == emailAddress).ToListAsync();

            if (dbUser != null && dbUser.Count > 0)
            {
                if (SaltedHash.VerifyPassword(password, dbUser[0].Hash, dbUser[0].Salt))
                {
                    return(CreateToken(dbUser[0]));
                }
            }
            return(null);
        }
        public async Task <RegisterUserResult> RegisterUser(RegisterUser user)
        {
            var emailAlreadyRegisteredUser = await _context.DbUsers.Where(x => x.EmailAddress == user.EmailAddress).ToListAsync();

            if (emailAlreadyRegisteredUser != null && emailAlreadyRegisteredUser.Count > 0)
            {
                return(new RegisterUserResult
                {
                    UserCreated = false,
                    Reason = $"User already registered with {user.EmailAddress}."
                });
            }
            var saltedHash     = SaltedHash.Generate(64, user.Password);
            var dbUserToCreate = new DbUser
            {
                ProviderId                 = user.EmailAddress,
                ProviderType               = "EMAIL_PASSWORD",
                EmailAddress               = user.EmailAddress,
                AccountEnabled             = false,
                ConfirmEmailToken          = Guid.NewGuid(),
                ConfirmEmailTokenExpiresAt = DateTime.UtcNow.AddMinutes(30),
                Hash  = saltedHash.Hash,
                Salt  = saltedHash.Salt,
                Roles = new List <DbUserRole>()
                {
                    { new DbUserRole {
                          Role = Roles.User
                      } }
                }
            };

            _context.DbUsers.Add(dbUserToCreate);
            await _context.SaveChangesAsync();

            return(new RegisterUserResult
            {
                UserId = dbUserToCreate.Id,
                EmailAddress = dbUserToCreate.EmailAddress,
                ValidationToken = dbUserToCreate.ConfirmEmailToken,
                UserCreated = true,
                Reason = ""
            });
        }