1
0
mirror of https://github.com/actix/actix-extras.git synced 2025-02-21 10:04:49 +01:00

101 lines
3.7 KiB
Rust
Raw Normal View History

//! Identity management for Actix Web.
2019-03-09 18:04:40 -08:00
//!
//! `actix-identity` can be used to track identity of a user across multiple requests. It is built
//! on top of HTTP sessions, via [`actix-session`](https://docs.rs/actix-session).
2019-03-09 18:04:40 -08:00
//!
//! # Getting started
//! To start using identity management in your Actix Web application you must register
//! [`IdentityMiddleware`] and `SessionMiddleware` as middleware on your `App`:
2019-03-09 18:04:40 -08:00
//!
//! ```no_run
//! # use actix_web::web;
//! use actix_web::{cookie::Key, App, HttpServer, HttpResponse};
//! use actix_identity::IdentityMiddleware;
//! use actix_session::{storage::RedisSessionStore, SessionMiddleware};
2019-03-09 18:04:40 -08:00
//!
//! #[actix_web::main]
//! async fn main() {
//! let secret_key = Key::generate();
//! let redis_store = RedisSessionStore::new("redis://127.0.0.1:6379")
//! .await
//! .unwrap();
//!
//! HttpServer::new(move || {
//! App::new()
//! // Install the identity framework first.
//! .wrap(IdentityMiddleware::default())
//! // The identity system is built on top of sessions. You must install the session
//! // middleware to leverage `actix-identity`. The session middleware must be mounted
//! // AFTER the identity middleware: `actix-web` invokes middleware in the OPPOSITE
//! // order of registration when it receives an incoming request.
//! .wrap(SessionMiddleware::new(
//! redis_store.clone(),
//! secret_key.clone()
//! ))
//! // Your request handlers [...]
//! # .default_service(web::to(|| HttpResponse::Ok()))
//! })
//! # ;
//! }
2022-03-01 04:23:51 +00:00
//! ```
//!
//! User identities can be created, accessed and destroyed using the [`Identity`] extractor in your
//! request handlers:
//!
//! ```no_run
//! use actix_web::{get, post, HttpResponse, Responder, HttpRequest, HttpMessage};
//! use actix_identity::Identity;
//! use actix_session::storage::RedisSessionStore;
2019-03-09 18:04:40 -08:00
//!
2021-03-23 05:05:03 +00:00
//! #[get("/")]
//! async fn index(user: Option<Identity>) -> impl Responder {
//! if let Some(user) = user {
//! format!("Welcome! {}", user.id().unwrap())
2019-03-09 18:04:40 -08:00
//! } else {
2019-03-09 20:40:09 -08:00
//! "Welcome Anonymous!".to_owned()
2019-03-09 18:04:40 -08:00
//! }
//! }
//!
2021-03-23 05:05:03 +00:00
//! #[post("/login")]
//! async fn login(request: HttpRequest) -> impl Responder {
//! // Some kind of authentication should happen here
//! // e.g. password-based, biometric, etc.
//! // [...]
//!
//! // attach a verified user identity to the active session
//! Identity::login(&request.extensions(), "User1".into()).unwrap();
//!
//! HttpResponse::Ok()
2019-03-09 18:04:40 -08:00
//! }
//!
2021-03-23 05:05:03 +00:00
//! #[post("/logout")]
//! async fn logout(user: Identity) -> impl Responder {
//! user.logout();
//! HttpResponse::Ok()
2019-03-09 18:04:40 -08:00
//! }
//! ```
2019-03-09 18:04:40 -08:00
//!
//! # Advanced configuration
//! By default, `actix-identity` does not automatically log out users. You can change this behaviour
//! by customising the configuration for [`IdentityMiddleware`] via [`IdentityMiddleware::builder`].
2022-03-01 04:23:51 +00:00
//!
//! In particular, you can automatically log out users who:
//! - have been inactive for a while (see [`IdentityMiddlewareBuilder::visit_deadline`];
//! - logged in too long ago (see [`IdentityMiddlewareBuilder::login_deadline`]).
//!
//! [`IdentityMiddlewareBuilder::visit_deadline`]: config::IdentityMiddlewareBuilder::visit_deadline
//! [`IdentityMiddlewareBuilder::login_deadline`]: config::IdentityMiddlewareBuilder::login_deadline
2020-07-06 15:47:22 +09:00
2022-07-09 20:05:47 +01:00
#![forbid(unsafe_code)]
#![deny(rust_2018_idioms, nonstandard_style, missing_docs)]
2021-12-08 06:11:13 +00:00
#![warn(future_incompatible)]
2020-07-06 15:47:22 +09:00
pub mod config;
2021-03-23 05:05:03 +00:00
mod identity;
mod identity_ext;
2021-03-23 05:05:03 +00:00
mod middleware;
2019-03-09 18:04:40 -08:00
2021-03-23 05:05:03 +00:00
pub use self::identity::Identity;
pub use self::identity_ext::IdentityExt;
pub use self::middleware::IdentityMiddleware;