Protection des sessions
Protection manuelle — `session_active`
Pour protéger une session anonyme à valeur (panier, formulaire multi-étapes, wizard), utilisez protect_session :
use runique::middleware::auth::protect_session;
// Protège la session pendant 30 minutes
protect_session(&session, 60 * 30).await?;
La clé session_active stocke un timestamp Unix futur. La protection expire automatiquement à cette date — aucune clé à nettoyer manuellement.
Pour retirer la protection explicitement :
use runique::middleware::auth::unprotect_session;
unprotect_session(&session).await?;
Logique de protection
is_protected(record) = true si :
- record contient "user_id"
- OU record contient "session_active" avec un timestamp futur
Cas d'usage — protection d'un panier
pub async fn add_to_cart(request: Request, item: Item) -> AppResult<Response> {
// Ajouter l'article au panier
request.session.insert("cart", &cart).await?;
// Protéger la session 2h contre le cleanup d'urgence
protect_session(&request.session, 60 * 60 * 2).await?;
Ok(redirect("/cart"))
}
pub async fn checkout_complete(request: Request) -> AppResult<Response> {
// Vider le panier et retirer la protection
request.session.remove::<Cart>("cart").await?;
unprotect_session(&request.session).await?;
Ok(redirect("/confirmation"))
}