mirror of
https://github.com/actix/actix-extras.git
synced 2025-02-17 08:33:30 +01:00
fix: bad interaction between session state changes and renewal (#265)
This commit is contained in:
parent
cfd16c5478
commit
810a88a156
@ -1,7 +1,9 @@
|
|||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
## Unreleased - 2021-xx-xx
|
## Unreleased - 2021-xx-xx
|
||||||
|
- Fix bad interaction between session state changes and renewal. [#265]
|
||||||
|
|
||||||
|
[#265]: https://github.com/actix/actix-extras/pull/265
|
||||||
|
|
||||||
## 0.7.0 - 2022-07-09
|
## 0.7.0 - 2022-07-09
|
||||||
- Added `TtlExtensionPolicy` enum to support different strategies for extending the TTL attached to the session state. `TtlExtensionPolicy::OnEveryRequest` now allows for long-lived sessions that do not expire if the user remains active. [#233]
|
- Added `TtlExtensionPolicy` enum to support different strategies for extending the TTL attached to the session state. `TtlExtensionPolicy::OnEveryRequest` now allows for long-lived sessions that do not expire if the user remains active. [#233]
|
||||||
|
@ -128,7 +128,9 @@ impl Session {
|
|||||||
let mut inner = self.0.borrow_mut();
|
let mut inner = self.0.borrow_mut();
|
||||||
|
|
||||||
if inner.status != SessionStatus::Purged {
|
if inner.status != SessionStatus::Purged {
|
||||||
inner.status = SessionStatus::Changed;
|
if inner.status != SessionStatus::Renewed {
|
||||||
|
inner.status = SessionStatus::Changed;
|
||||||
|
}
|
||||||
|
|
||||||
let key = key.into();
|
let key = key.into();
|
||||||
let val = serde_json::to_string(&value)
|
let val = serde_json::to_string(&value)
|
||||||
@ -155,7 +157,9 @@ impl Session {
|
|||||||
let mut inner = self.0.borrow_mut();
|
let mut inner = self.0.borrow_mut();
|
||||||
|
|
||||||
if inner.status != SessionStatus::Purged {
|
if inner.status != SessionStatus::Purged {
|
||||||
inner.status = SessionStatus::Changed;
|
if inner.status != SessionStatus::Renewed {
|
||||||
|
inner.status = SessionStatus::Changed;
|
||||||
|
}
|
||||||
return inner.state.remove(key);
|
return inner.state.remove(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,7 +191,9 @@ impl Session {
|
|||||||
let mut inner = self.0.borrow_mut();
|
let mut inner = self.0.borrow_mut();
|
||||||
|
|
||||||
if inner.status != SessionStatus::Purged {
|
if inner.status != SessionStatus::Purged {
|
||||||
inner.status = SessionStatus::Changed;
|
if inner.status != SessionStatus::Renewed {
|
||||||
|
inner.status = SessionStatus::Changed;
|
||||||
|
}
|
||||||
inner.state.clear()
|
inner.state.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,3 +68,43 @@ async fn session_entries() {
|
|||||||
map.contains_key("test_str");
|
map.contains_key("test_str");
|
||||||
map.contains_key("test_num");
|
map.contains_key("test_num");
|
||||||
}
|
}
|
||||||
|
#[actix_web::test]
|
||||||
|
async fn insert_session_after_renew() {
|
||||||
|
let session = test::TestRequest::default().to_srv_request().get_session();
|
||||||
|
|
||||||
|
session.insert("test_val", "val").unwrap();
|
||||||
|
assert_eq!(session.status(), SessionStatus::Changed);
|
||||||
|
|
||||||
|
session.renew();
|
||||||
|
assert_eq!(session.status(), SessionStatus::Renewed);
|
||||||
|
|
||||||
|
session.insert("test_val1", "val1").unwrap();
|
||||||
|
assert_eq!(session.status(), SessionStatus::Renewed);
|
||||||
|
}
|
||||||
|
#[actix_web::test]
|
||||||
|
async fn remove_session_after_renew() {
|
||||||
|
let session = test::TestRequest::default().to_srv_request().get_session();
|
||||||
|
|
||||||
|
session.insert("test_val", "val").unwrap();
|
||||||
|
session.remove("test_val").unwrap();
|
||||||
|
assert_eq!(session.status(), SessionStatus::Changed);
|
||||||
|
|
||||||
|
session.renew();
|
||||||
|
session.insert("test_val", "val").unwrap();
|
||||||
|
session.remove("test_val").unwrap();
|
||||||
|
assert_eq!(session.status(), SessionStatus::Renewed);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[actix_web::test]
|
||||||
|
async fn clear_session_after_renew() {
|
||||||
|
let session = test::TestRequest::default().to_srv_request().get_session();
|
||||||
|
|
||||||
|
session.clear();
|
||||||
|
assert_eq!(session.status(), SessionStatus::Changed);
|
||||||
|
|
||||||
|
session.renew();
|
||||||
|
assert_eq!(session.status(), SessionStatus::Renewed);
|
||||||
|
|
||||||
|
session.clear();
|
||||||
|
assert_eq!(session.status(), SessionStatus::Renewed);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user