public async Task <TokenModel> LoginWithFacebook(FacebookTokenViewModel facebookToken)
        {
            FacebookUserCredentialsResponse facebookResponse = await facebookApiManager.GetUserCredentials(facebookToken.FacebookToken);

            if (facebookResponse.email != null)
            {
                ApplicationUser user = await applicationUserManager.GetUserByEmail(facebookResponse.email);

                if (user == null)
                {
                    user = await CreateUser(facebookResponse);
                }
                return(GetToken(user));
            }
            throw new Exception("Facebook not returned email address");
        }
        private async Task <ApplicationUser> CreateUser(FacebookUserCredentialsResponse facebookResponse)
        {
            ApplicationUser user = new ApplicationUser {
                UserName = facebookResponse.email, Email = facebookResponse.email
            };
            IdentityResult result = await applicationUserManager.CreateAsync(user);

            if (result.Succeeded)
            {
                IdentityResult loginInfoResult = await applicationUserManager.AddLoginAsync(user, new UserLoginInfo("Facebook", facebookResponse.id, facebookResponse.name));

                if (!loginInfoResult.Succeeded)
                {
                    throw new Exception("Creating new user failed");
                }
            }
            else
            {
                throw new Exception("Creating new user failed");
            }

            return(user);
        }