mirror of
https://github.com/LukeMathWalker/zero-to-production.git
synced 2024-09-27 13:50:03 +00:00
37 lines
949 B
Rust
37 lines
949 B
Rust
use actix_session::Session;
|
|
use actix_session::SessionExt;
|
|
use actix_web::dev::Payload;
|
|
use actix_web::{FromRequest, HttpRequest};
|
|
use std::future::{ready, Ready};
|
|
use uuid::Uuid;
|
|
|
|
pub struct TypedSession(Session);
|
|
|
|
impl TypedSession {
|
|
const USER_ID_KEY: &'static str = "user_id";
|
|
|
|
pub fn renew(&self) {
|
|
self.0.renew();
|
|
}
|
|
|
|
pub fn insert_user_id(&self, user_id: Uuid) -> Result<(), serde_json::Error> {
|
|
self.0.insert(Self::USER_ID_KEY, user_id)
|
|
}
|
|
|
|
pub fn get_user_id(&self) -> Result<Option<Uuid>, serde_json::Error> {
|
|
self.0.get(Self::USER_ID_KEY)
|
|
}
|
|
|
|
pub fn log_out(self) {
|
|
self.0.purge()
|
|
}
|
|
}
|
|
|
|
impl FromRequest for TypedSession {
|
|
type Error = <Session as FromRequest>::Error;
|
|
type Future = Ready<Result<TypedSession, Self::Error>>;
|
|
|
|
fn from_request(req: &HttpRequest, _payload: &mut Payload) -> Self::Future {
|
|
ready(Ok(TypedSession(req.get_session())))
|
|
}
|
|
}
|