public async Task <IActionResult> GetUserInfo(AccountProviderNames provider, string token)
        {
            var loginInfo = provider == AccountProviderNames.Facebook ? await _facebookHelper.GetLoginProviderAsync(token) :
                            await SocialHelper.VerifyGoogleTokenAsync(token);

            if (loginInfo == null)
            {
                this.AddAlertDanger($"Lỗi khi lấy thông tin từ hệ thống {provider}. Xin vui lòng thử lại. Token {token}");
                return(RedirectToAction("Login"));
            }

            var accountProvider = await _accountService.GetAccountProviderByProvider(provider, loginInfo.ProviderId, token);

            if (accountProvider.FbProfileLink.Contains("facebook.com/app_scoped_user_id"))
            {
                return(RedirectToAction("ChangeFacebookUrl", "Account"));
            }



            var accountProviderExist = accountProvider != null;

            var auth = await _accountService.GetAuth(loginInfo);

            if (auth == null)
            {
                this.AddAlertDanger("Lỗi khi lấy thông tin đăng nhập. Tài khoản đã bị khóa hoặc xóa. Xin vui lòng liên hệ quản trị hệ thống");
                return(RedirectToAction("Login"));
            }

            if (provider == AccountProviderNames.Facebook)
            {
                BackgroundJob.Enqueue <IFacebookJob>(m => m.ExtendAccessToken());
                if (!accountProviderExist)
                {
                    BackgroundJob.Enqueue <IFacebookJob>(m => m.UpdateFbPost(auth.Id, auth.Username, 1));
                }
            }


            await SignIn(auth);

            return(RedirectToAction("Index", "Account"));
        }
        public async Task <IActionResult> LinkProvider(AccountProviderNames provider, string token, string returnurl)
        {
            var info = provider == AccountProviderNames.Facebook ? await _facebookHelper.GetLoginProviderAsync(token) :
                       await SocialHelper.VerifyGoogleTokenAsync(token);

            if (info == null)
            {
                this.AddAlertDanger($"Lỗi khi lấy thông tin từ hệ thống {provider}. Xin vui lòng thử lại. Token {token}");
            }
            else
            {
                var r = await _accountService.UpdateAccountProvider(CurrentUser.Id, new UpdateAccountProviderViewModel()
                {
                    Email      = info.Email,
                    Image      = info.Image,
                    Name       = info.Name,
                    Provider   = provider,
                    ProviderId = info.ProviderId
                }, CurrentUser.Username);

                if (r < 0)
                {
                    this.AddAlertDanger($"Tài khoản {info.Provider} đã được liên kết với tài khoản khác. Vui lòng thử lại tài khoản khác");
                }
                else
                {
                    BackgroundJob.Enqueue <IFacebookJob>(m => m.ExtendAccessToken());
                    this.AddAlertSuccess($"Liên kết Tài khoản {info.Provider} thành công");


                    if (r == 2)
                    { // tao moi fb id -> add new FbPost tu 2018
                        BackgroundJob.Enqueue <IFacebookJob>(m => m.UpdateFbPost(CurrentUser.Id, CurrentUser.Username, 1));
                    }
                }
            }

            if (!string.IsNullOrEmpty(returnurl))
            {
                return(Redirect(returnurl));
            }
            return(RedirectToAction("Index"));
        }