public IActionResult GetTodoItems() { // Nhận Token rồi xét Token có trong Redis không. string authHeader = HttpContext.Request.Headers["Authorization"]; string[] TokenArray = authHeader.Split(" "); var llen = _database.ListLength("mylist"); var lindex = _database.ListGetByIndex("mylist", llen - 1); object data = new object(); List <TodoItem> todoItem = new List <TodoItem>(); Connect kn = new Connect(); kn.kn_CSDL(); // Đọc JWT rồi convert để lấy roles var stream = TokenArray[1]; var handler = new JwtSecurityTokenHandler(); var tokenS = handler.ReadToken(stream) as JwtSecurityToken; var jsonPayload = tokenS.Payload.SerializeToJson(); Roles roles = new Roles(); roles = JsonConvert.DeserializeObject <Roles>(jsonPayload); // Nếu Token có trong Redis if (lindex == TokenArray[1]) { // Nếu list Redis lớn hơn 2 thì xóa 1 if (llen >= 2) { _database.ListLeftPop("mylist"); } todoItem = kn.knoi.Query <TodoItem>("GetAll", commandType: CommandType.StoredProcedure).ToList(); // Tạo một Token mới var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(_appSettings.Secret); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Role, roles.Role), }), Expires = DateTime.UtcNow.AddDays(7), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); string fullbearer = tokenHandler.WriteToken(token); _database.ListRightPush("mylist", fullbearer); // Trả về danh sách item + token mới data = new { token = fullbearer, todoitem = todoItem }; } return(Ok(data)); }
/// <summary> /// 移除并返回存储在该键列表的第一个元素 /// </summary> /// <param name="redisKey"></param> /// <returns></returns> public string ListLeftPop(string redisKey) { redisKey = GetKeyForRedis(redisKey); return(_database.ListLeftPop(redisKey)); }