mirror of
https://github.com/actix/actix-extras.git
synced 2024-11-30 18:34:36 +01:00
allow session-only cookies (#161)
Co-authored-by: Rob Ede <robjtede@icloud.com>
This commit is contained in:
parent
ba248a681b
commit
8d635f71fb
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
## Unreleased - 2020-xx-xx
|
## Unreleased - 2020-xx-xx
|
||||||
* Implement `std::error::Error` for `Error` [#135]
|
* Implement `std::error::Error` for `Error` [#135]
|
||||||
|
* Allow the removal of Max-Age for session-only cookies. [#161]
|
||||||
|
|
||||||
|
[#161]: https://github.com/actix/actix-extras/pull/161
|
||||||
|
|
||||||
## 0.9.1 - 2020-09-12
|
## 0.9.1 - 2020-09-12
|
||||||
* Enforce minimum redis-async version of 0.6.3 to workaround breaking patch change.
|
* Enforce minimum redis-async version of 0.6.3 to workaround breaking patch change.
|
||||||
|
@ -80,8 +80,9 @@ impl RedisSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Set custom cookie max-age
|
/// Set custom cookie max-age
|
||||||
pub fn cookie_max_age(mut self, max_age: Duration) -> Self {
|
/// Use `None` for session-only cookies
|
||||||
Rc::get_mut(&mut self.0).unwrap().max_age = Some(max_age);
|
pub fn cookie_max_age(mut self, max_age: impl Into<Option<Duration>>) -> Self {
|
||||||
|
Rc::get_mut(&mut self.0).unwrap().max_age = max_age.into();
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -450,6 +451,7 @@ mod test {
|
|||||||
// Step 1: GET index
|
// Step 1: GET index
|
||||||
// - set-cookie actix-session will be in response (session cookie #1)
|
// - set-cookie actix-session will be in response (session cookie #1)
|
||||||
// - response should be: {"counter": 0, "user_id": None}
|
// - response should be: {"counter": 0, "user_id": None}
|
||||||
|
// - cookie should have default max-age of 7 days
|
||||||
// Step 2: GET index, including session cookie #1 in request
|
// Step 2: GET index, including session cookie #1 in request
|
||||||
// - set-cookie will *not* be in response
|
// - set-cookie will *not* be in response
|
||||||
// - response should be: {"counter": 0, "user_id": None}
|
// - response should be: {"counter": 0, "user_id": None}
|
||||||
@ -510,6 +512,7 @@ mod test {
|
|||||||
counter: 0
|
counter: 0
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
assert_eq!(cookie_1.max_age(), Some(Duration::days(7)));
|
||||||
|
|
||||||
// Step 2: GET index, including session cookie #1 in request
|
// Step 2: GET index, including session cookie #1 in request
|
||||||
// - set-cookie will *not* be in response
|
// - set-cookie will *not* be in response
|
||||||
@ -667,4 +670,33 @@ mod test {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
assert_ne!(cookie_5.value(), cookie_2.value());
|
assert_ne!(cookie_5.value(), cookie_2.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
async fn test_max_age_session_only() {
|
||||||
|
//
|
||||||
|
// Test that removing max_age results in a session-only cookie
|
||||||
|
//
|
||||||
|
let srv = test::start(|| {
|
||||||
|
App::new()
|
||||||
|
.wrap(
|
||||||
|
RedisSession::new("127.0.0.1:6379", &[0; 32])
|
||||||
|
.cookie_name("test-session")
|
||||||
|
.cookie_max_age(None),
|
||||||
|
)
|
||||||
|
.wrap(middleware::Logger::default())
|
||||||
|
.service(resource("/").route(get().to(index)))
|
||||||
|
});
|
||||||
|
|
||||||
|
let req = srv.get("/").send();
|
||||||
|
let resp = req.await.unwrap();
|
||||||
|
let cookie = resp
|
||||||
|
.cookies()
|
||||||
|
.unwrap()
|
||||||
|
.clone()
|
||||||
|
.into_iter()
|
||||||
|
.find(|c| c.name() == "test-session")
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(cookie.max_age(), None);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ impl IntoHeaderValue for Basic {
|
|||||||
let encoded = base64::encode(&credentials);
|
let encoded = base64::encode(&credentials);
|
||||||
let mut value = BytesMut::with_capacity(6 + encoded.len());
|
let mut value = BytesMut::with_capacity(6 + encoded.len());
|
||||||
value.put(&b"Basic "[..]);
|
value.put(&b"Basic "[..]);
|
||||||
value.put(&encoded.as_bytes()[..]);
|
value.put(encoded.as_bytes());
|
||||||
|
|
||||||
HeaderValue::from_maybe_shared(value.freeze())
|
HeaderValue::from_maybe_shared(value.freeze())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user