1
0
mirror of https://github.com/actix/examples synced 2025-06-26 09:17:41 +02:00

add session ttl customization example

This commit is contained in:
Rob Ede
2022-08-28 18:39:28 +01:00
parent d259177eab
commit fcd013fcde
18 changed files with 84 additions and 60 deletions

View File

@ -1,5 +1,4 @@
use actix_identity::Identity;
use actix_identity::{CookieIdentityPolicy, IdentityService};
use actix_identity::{CookieIdentityPolicy, Identity, IdentityService};
use actix_web::{middleware, web, App, HttpResponse, HttpServer};
use rand::Rng;

View File

@ -5,8 +5,14 @@
//!
//! [User guide](https://actix.rs/docs/middleware/#user-sessions)
use actix_session::{storage::CookieSessionStore, Session, SessionMiddleware};
use actix_web::{cookie::Key, middleware::Logger, web, App, HttpRequest, HttpServer, Result};
use actix_session::{
config::PersistentSession, storage::CookieSessionStore, Session, SessionMiddleware,
};
use actix_web::{
cookie::{self, Key},
middleware::Logger,
web, App, HttpRequest, HttpServer, Result,
};
/// simple index handler with session
async fn index(session: Session, req: HttpRequest) -> Result<&'static str> {
@ -39,6 +45,10 @@ async fn main() -> std::io::Result<()> {
.wrap(
SessionMiddleware::builder(CookieSessionStore::default(), Key::from(&[0; 64]))
.cookie_secure(false)
// customize session and cookie expiration
.session_lifecycle(
PersistentSession::default().session_ttl(cookie::time::Duration::hours(2)),
)
.build(),
)
.service(web::resource("/").to(index))

View File

@ -2,13 +2,14 @@ use std::future::{ready, Ready};
use actix_identity::Identity;
use actix_web::{dev::Payload, web, Error, FromRequest, HttpRequest, HttpResponse};
use diesel::prelude::*;
use diesel::PgConnection;
use diesel::{prelude::*, PgConnection};
use serde::Deserialize;
use crate::errors::ServiceError;
use crate::models::{Pool, SlimUser, User};
use crate::utils::verify;
use crate::{
errors::ServiceError,
models::{Pool, SlimUser, User},
utils::verify,
};
#[derive(Debug, Deserialize)]
pub struct AuthData {

View File

@ -2,8 +2,10 @@ use actix_web::{web, HttpResponse};
use diesel::{prelude::*, PgConnection};
use serde::Deserialize;
use crate::email_service::send_invitation;
use crate::models::{Invitation, Pool};
use crate::{
email_service::send_invitation,
models::{Invitation, Pool},
};
#[derive(Deserialize)]
pub struct InvitationData {

View File

@ -3,8 +3,10 @@ extern crate diesel;
use actix_identity::{CookieIdentityPolicy, IdentityService};
use actix_web::{middleware, web, App, HttpServer};
use diesel::prelude::*;
use diesel::r2d2::{self, ConnectionManager};
use diesel::{
prelude::*,
r2d2::{self, ConnectionManager},
};
use time::Duration;
mod auth_handler;

View File

@ -2,9 +2,11 @@ use actix_web::{web, HttpResponse};
use diesel::prelude::*;
use serde::Deserialize;
use crate::errors::ServiceError;
use crate::models::{Invitation, Pool, SlimUser, User};
use crate::utils::hash_password;
use crate::{
errors::ServiceError,
models::{Invitation, Pool, SlimUser, User},
utils::hash_password,
};
// UserData is used to extract data from a post request by the client
#[derive(Debug, Deserialize)]
@ -34,8 +36,10 @@ fn query(
password: String,
pool: web::Data<Pool>,
) -> Result<SlimUser, crate::errors::ServiceError> {
use crate::schema::invitations::dsl::{id, invitations};
use crate::schema::users::dsl::users;
use crate::schema::{
invitations::dsl::{id, invitations},
users::dsl::users,
};
let invitation_id = uuid::Uuid::parse_str(&invitation_id)?;
let conn: &PgConnection = &pool.get().unwrap();