public IHttpActionResult ExternalLoginCallback()
        {
            GoogleOAuth2Client.RewriteRequest();
            IHttpActionResult actionResult;

            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Settings.Url + "api/account/ExternalLoginCallback");

            if (!result.IsSuccessful)
            {
                actionResult = Redirect(Settings.Url + "api/Account/ExternalLoginFailure");
            }

            else if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                actionResult =
                    Redirect(Settings.Url + "api/Account/ExternalLoginFinal?provider=" + result.Provider + "&providerUserId=" +
                             result.ProviderUserId);
            }
            else
            {
                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                var    model     = new AccountModels.RegisterExternalLoginModel
                {
                    UserName          = result.UserName,
                    ExternalLoginData = loginData
                };

                switch (result.Provider)
                {
                case "facebook":
                case "google":
                {
                    model.Email    = result.UserName;
                    model.UserName = result.UserName;
                    break;
                }

                case "twitter":
                {
                    model.Email    = result.UserName;
                    model.UserName = result.UserName;
                    break;
                }

                default:
                {
                    model.Email    = result.UserName;
                    model.UserName = result.UserName;
                    break;
                }
                }

                actionResult =
                    Redirect(Settings.Url + "api/Account/ExternalLoginConfirmation?username="******"&email=" +
                             model.Email + "&externallogindata=" + model.ExternalLoginData + "&provider=" +
                             result.Provider + "&providerUserId=" + result.ProviderUserId);
            }

            return(actionResult);
        }
        public IHttpActionResult ExternalLoginConfirmation(string username, string externalLoginData, string email, string provider, string providerUserId)
        {
            AccountModels.RegisterExternalLoginModel model = new AccountModels.RegisterExternalLoginModel()
            {
                UserName = username, ExternalLoginData = externalLoginData, Email = email
            };

            _accountRepository.CreateUser(model, provider, providerUserId);

            return(Redirect(Settings.Url + "api/Account/ExternalLoginFinal?provider=" + provider + "&providerUserId=" + providerUserId));
        }
        public bool CreateUser(AccountModels.RegisterExternalLoginModel model, string provider, string providerUserId)
        {
            AccountModels.UserProfile user =
                _db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());

            if (user == null)
            {
                user = new AccountModels.UserProfile {
                    UserName = model.UserName
                };
                _db.UserProfiles.Add(user);
                _db.SaveChanges();

                OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);

                return(true);
            }
            return(false);
        }