public async Task <IActionResult> Logout()
        {
            try
            {
                var userId = _cookieService.Get("user_id");

                if (userId != null)
                {
                    var protectorProvider = _provider.GetService <IDataProtectionProvider>();
                    var protector         = protectorProvider.CreateProtector(_dataProtectionKeys.ApplicationUserKey);
                    var unprotectedToken  = protector.Unprotect(userId);

                    var rt = _db.Tokens.FirstOrDefault(t => t.UserId == unprotectedToken);

                    // First remove the Token
                    if (rt != null)
                    {
                        _db.Tokens.Remove(rt);
                    }
                    await _db.SaveChangesAsync();

                    // Second remove all Cookies
                    _cookieService.DeleteAllCookies(cookiesToDelete);
                }
            }
            catch (Exception ex)
            {
                _cookieService.DeleteAllCookies(cookiesToDelete);
                Log.Error("An error occurred while seeding the database  {Error} {StackTrace} {InnerException} {Source}",
                          ex.Message, ex.StackTrace, ex.InnerException, ex.Source);
            }

            Log.Information("User logged out.");
            return(RedirectToLocal(null));
        }
        public async Task <bool> LogoutUserAsync()
        {
            var cookiesToDelete = new[]
            {
                "twoFactorToken",
                "memberId",
                "rememberDevice",
                "access_token",
                "loginStatus",
                "refreshToken",
                "userRole",
                "username",
                "user_id"
            };

            try
            {
                var username = _cookieSvc.Get("username");

                if (username != null)
                {
                    var user = await _userManager.FindByNameAsync(username);

                    var memberToken = await _db.Tokens.Where(x => x.UserId == user.Id).ToListAsync();

                    if (memberToken.Count > 0)
                    {
                        _db.Tokens.RemoveRange(memberToken);
                        await _db.SaveChangesAsync();
                    }

                    _cookieSvc.DeleteAllCookies(cookiesToDelete);

                    return(true);
                }
            }
            catch (Exception ex)
            {
                Log.Error("An error occurred while seeding the database  {Error} {StackTrace} {InnerException} {Source}",
                          ex.Message, ex.StackTrace, ex.InnerException, ex.Source);
            }
            _cookieSvc.DeleteAllCookies(cookiesToDelete);
            return(false);
        }