Skip to content

Commit

Permalink
feat: add access to UserSession from RequestHead (#1164)
Browse files Browse the repository at this point in the history
* feat: add access to UserSession from RequestHead

* add test case for session from RequestHead and changes entry for the new feature
  • Loading branch information
tglman authored and fafhrd91 committed Dec 6, 2019
1 parent 205a964 commit fbead13
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
1 change: 1 addition & 0 deletions actix-session/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
at successful login to cycle a session (new key/cookie but keeps state).
Use ``Session.purge()`` at logout to invalid a session cookie (and remove
from redis cache, if applicable).
* Add access to the session from RequestHead for use of session from guard methods

## [0.1.1] - 2019-06-03

Expand Down
24 changes: 23 additions & 1 deletion actix-session/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ use std::cell::RefCell;
use std::collections::HashMap;
use std::rc::Rc;

use actix_web::dev::{Extensions, Payload, ServiceRequest, ServiceResponse};
use actix_web::dev::{
Extensions, Payload, RequestHead, ServiceRequest, ServiceResponse,
};
use actix_web::{Error, FromRequest, HttpMessage, HttpRequest};
use futures::future::{ok, Ready};
use serde::de::DeserializeOwned;
Expand Down Expand Up @@ -99,6 +101,12 @@ impl UserSession for ServiceRequest {
}
}

impl UserSession for RequestHead {
fn get_session(&mut self) -> Session {
Session::get_session(&mut *self.extensions_mut())
}
}

#[derive(PartialEq, Clone, Debug)]
pub enum SessionStatus {
Changed,
Expand Down Expand Up @@ -281,6 +289,20 @@ mod tests {
assert_eq!(res, Some("value".to_string()));
}

#[test]
fn get_session_from_request_head() {
let mut req = test::TestRequest::default().to_srv_request();

Session::set_session(
vec![("key".to_string(), "\"value\"".to_string())].into_iter(),
&mut req,
);

let session = req.head_mut().get_session();
let res = session.get::<String>("key").unwrap();
assert_eq!(res, Some("value".to_string()));
}

#[test]
fn purge_session() {
let req = test::TestRequest::default().to_srv_request();
Expand Down

0 comments on commit fbead13

Please sign in to comment.