public async Task <IHttpActionResult> AddExternalLogin(AddExternalLoginRequest model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);

            AuthenticationTicket ticket = AccessTokenFormat.Unprotect(model.ExternalAccessToken);

            if (ticket == null || ticket.Identity == null || (ticket.Properties != null &&
                                                              ticket.Properties.ExpiresUtc.HasValue &&
                                                              ticket.Properties.ExpiresUtc.Value < DateTimeOffset.UtcNow))
            {
                return(BadRequest("External login failure."));
            }

            ExternalLoginData externalData = ExternalLoginData.FromIdentity(ticket.Identity);

            if (externalData == null)
            {
                return(BadRequest("The external login is already associated with an account."));
            }

            IdentityResult result = await UserManager.AddLoginAsync(User.Identity.GetUserId(),
                                                                    new UserLoginInfo(externalData.LoginProvider, externalData.ProviderKey));

            if (!result.Succeeded)
            {
                return(GetErrorResult(result));
            }

            return(Ok());
        }
        public async Task <AddExternalLoginResponse> AddExternalLoginAsync(AddExternalLoginRequest request)
        {
            if (request.LoginInfo == null)
            {
                return(new AddExternalLoginResponse()
                {
                    Succeded = false,
                    Message = "Login info was not initialize"
                });
            }
            var result = await _userRepository.AddLoginAsync(request.UserId, request.LoginInfo);

            return(new AddExternalLoginResponse()
            {
                Succeded = result.Succeeded,
                Message = result.Errors.FirstOrDefault() ?? String.Empty
            });
        }