private Task <IdentityApplicationUser> GetUserInfo()
        {
            var userId = SecurityExtensions.GetUserId(Identity);

            var userInfo = ApplicationUserManager.FindByIdAsync(userId);

            return(userInfo);
        }
        /// <summary>
        /// Принимает подтверждение от внешнего провайдера о входе пользователя в систему.
        /// </summary>
        private Task <object> LinkExternalLoginCallback(IHttpRequest request)
        {
            return(ChallengeExternalProviderCallback(request, async loginInfo =>
            {
                // Определение текущего пользователя
                var userId = SecurityExtensions.GetUserId(Identity);

                // Добавление имени входа пользователя
                var addLoginTask = await ApplicationUserManager.AddLoginAsync(userId, loginInfo.Login);

                return !addLoginTask.Succeeded
                                                                                   ? string.Join(Environment.NewLine, addLoginTask.Errors)
                                                                                   : null;
            }));
        }
        /// <summary>
        /// Удаляет у текущего пользователя имя входа у внешнего провайдера.
        /// </summary>
        private async Task <object> UnlinkExternalLogin(IHttpRequest request)
        {
            if (!IsAuthenticated())
            {
                return(CreateErrorResponse(Resources.RequestIsNotAuthenticated, 401));
            }

            dynamic unlinkExternalLoginForm = request.Form;
            string  provider    = unlinkExternalLoginForm.Provider;
            string  providerKey = unlinkExternalLoginForm.ProviderKey;

            if (string.IsNullOrWhiteSpace(provider))
            {
                return(CreateErrorResponse(Resources.ExternalProviderCannotBeNullOrWhiteSpace, 400));
            }

            if (string.IsNullOrWhiteSpace(providerKey))
            {
                return(CreateErrorResponse(Resources.ExternalProviderKeyCannotBeNullOrWhiteSpace, 400));
            }

            // Определение текущего пользователя
            var userId = SecurityExtensions.GetUserId(Identity);

            // Удаление имени входа пользователя
            var removeLoginTask = await ApplicationUserManager.RemoveLoginAsync(userId, new UserLoginInfo(provider, providerKey));

            if (!removeLoginTask.Succeeded)
            {
                var errorMessage = !removeLoginTask.Succeeded
                                       ? string.Join(Environment.NewLine, removeLoginTask.Errors)
                                       : null;

                return(CreateErrorResponse(errorMessage, 400));
            }

            return(CreateSuccesResponse <object>(null));
        }