public async Task Callback(string code)
        {
            try
            {
                HttpContext.Session.TryGetValue("Host", out byte[] hostByte);
                var host = Encoding.ASCII.GetString(hostByte);

                if (string.IsNullOrEmpty(host))
                {
                    throw new UserFriendlyException("Host is required.");
                }

                using (AbpSession.Use(1, null))
                {
                    CurrentUnitOfWork.SetTenantId(1);
                    Logger.Info($"{nameof(code)} : {code}");
                    var callbackUrl = string.Empty;

                    callbackUrl = WebUtility.UrlEncode($"{Request.Scheme}://{Request.Host}/pod/authentication/callback");

                    var podToken = await _service.GetTokenAsync(WebUtility.UrlDecode(callbackUrl), code);

                    Logger.Info($"{nameof(podToken.AccessToken)} : {podToken.AccessToken}");

                    var profileInfo = await _service.GetUserProfileAsync(podToken.AccessToken);

                    var ssoId = profileInfo.ssoId;

                    Logger.Info($"{nameof(profileInfo)} : {profileInfo}");

                    var user = await userRepo.GetAll().SingleOrDefaultAsync(ff => ff.UserName == profileInfo.Username);

                    Logger.Info($"{nameof(user)} : {user}");

                    if (user == null)
                    {
                        user = await ImportUserFromPodAsync(profileInfo);
                    }
                    else
                    {
                        await EditUserProfileBasedOnPod(user, profileInfo);
                    }

                    try
                    {
                        var contact = await _service.AddContactAsync(SettingManager.GetSettingValue(AppSettingNames.PodApiToken), profileInfo.Username);

                        user.PodContactId = contact.Id;
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("Error in adding user as contact", ex);
                    }

                    CurrentUnitOfWork.SaveChanges();

                    var phone = GetIndividualUserPhoneAsync(profileInfo);

                    externalTokensRepo.Insert(new ExternalToken
                    {
                        UserId       = user.Id,
                        AccessToken  = podToken.AccessToken,
                        CreationTime = DateTime.UtcNow,
                        Provider     = "Pod",
                        RefreshToken = podToken.RefreshToken
                    });

                    var loginResult = await GetLoginResultAsync(
                        user.UserName,
                        "123qwe@QWE",
                        "Default"
                        );

                    var accessToken          = CreateAccessToken(CreateJwtClaims(loginResult.Identity));
                    var encryptedAccessToken = GetEncryptedAccessToken(accessToken);

                    var redurectUrl = $"{host}/loggedIn";
                    var base64Token = Convert.ToBase64String(Encoding.UTF8.GetBytes(accessToken));
                    Response.Redirect($"{redurectUrl}/{user.Id}/?token={base64Token}");
                }
            }
            catch (Exception e)
            {
                Logger.Error("Error in authentication callback", e);

                throw new UserFriendlyException("There was an error in authentication callback. Please take a look at system log to get more information");
            }
        }