docs.rs failed to build axum_database_sessions-4.0.0
Please check the
build logs for more information.
See
Builds for ideas on how to fix a failed build,
or
Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault,
open an issue.
Axum_Database_Sessions
Library to Provide a Session management layer.
Help
If you need help with this library or have suggestions please go to our Discord Group
Install
Axum Database Sessions uses tokio
[dependencies]
axum_database_sessions = { version = "4.0.0", features = [ "postgres-rustls"] }
Cargo Feature Flags
default
: [postgres-rustls
]
sqlite-rustls
: Sqlx 0.6.0
support for the self-contained SQLite database engine and rustls
.
sqlite-native
: Sqlx 0.6.0
support for the self-contained SQLite database engine and native-tls
.
postgres-rustls
: Sqlx 0.6.0
support for the Postgres database server and rustls
.
postgres-native
: Sqlx 0.6.0
support for the Postgres database server and native-tls
.
mysql-rustls
: Sqlx 0.6.0
support for the MySQL/MariaDB database server and rustls
.
mysql-native
: Sqlx 0.6.0
support for the MySQL/MariaDB database server and native-tls
.
redis-db
: redis 0.21.5
session support.
Example
use sqlx::{ConnectOptions, postgres::{PgPoolOptions, PgConnectOptions}};
use std::net::SocketAddr;
use axum_database_sessions::{AxumSession, AxumPgPool, AxumSessionConfig, AxumSessionStore, AxumSessionLayer};
use axum::{
Router,
routing::get,
};
#[tokio::main]
async fn main() {
let poll = connect_to_database().await.unwrap();
let session_config = AxumSessionConfig::default()
.with_table_name("test_table");
let session_store = AxumSessionStore::<AxumPgPool>::new(Some(poll.clone().into()), session_config);
session_store.migrate().await.unwrap();
let app = Router::new()
.route("/greet", get(greet))
.layer(AxumSessionLayer::new(session_store));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
tracing::debug!("listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
async fn greet(session: AxumSession<AxumPgPool>) -> String {
let mut count: usize = session.get("count").await.unwrap_or(0);
count += 1;
session.set("count", count).await;
count.to_string()
}
async fn connect_to_database() -> anyhow::Result<sqlx::Pool<sqlx::Postgres>> {
unimplemented!()
}
To enable private cookies for confidentiality, integrity, and authenticity.
When a Key is set it will automatically set the Cookie into an encypted Private cookie which
both protects the cookies data from prying eye's it also ensures the authenticity of the cookie.
Example
use sqlx::{ConnectOptions, postgres::{PgPoolOptions, PgConnectOptions}};
use std::net::SocketAddr;
use axum_database_sessions::{AxumSession, AxumPgPool, AxumSessionConfig, AxumSessionStore, AxumSessionLayer, AxumSessionMode, Key};
use axum::{
Router,
routing::get,
};
#[tokio::main]
async fn main() {
let session_config = AxumSessionConfig::default()
.with_table_name("test_table")
.with_key(Key::generate());
let session_store = AxumSessionStore::<AxumPgPool>::new(None, session_config);
session_store.initiate().await.unwrap();
let app = Router::new()
.route("/greet", get(greet))
.layer(AxumSessionLayer::new(session_store));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
tracing::debug!("listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
To use Axum_database_session in non_persistant mode Set the client to None and import AxumNullPool.
AxumNullPool is always loaded and can be used where you do not want to include any database within the build.
Example
use sqlx::{ConnectOptions, postgres::{PgPoolOptions, PgConnectOptions}};
use std::net::SocketAddr;
use axum_database_sessions::{AxumSession, AxumNullPool, AxumSessionConfig, AxumSessionStore, AxumSessionLayer};
use axum::{
Router,
routing::get,
};
#[tokio::main]
async fn main() {
let session_config = AxumSessionConfig::default()
.with_table_name("test_table");
let session_store = AxumSessionStore::<AxumNullPool>::new(None, session_config);
let app = Router::new()
.route("/greet", get(greet))
.layer(AxumSessionLayer::new(session_store));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
tracing::debug!("listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
async fn greet(session: AxumSession<AxumNullPool>) -> String {
let mut count: usize = session.get("count").await.unwrap_or(0);
count += 1;
session.set("count", count).await;
count.to_string()
}
To use Axum_database_session with session mode set as Storable.
Example
use sqlx::{ConnectOptions, postgres::{PgPoolOptions, PgConnectOptions}};
use std::net::SocketAddr;
use axum_database_sessions::{AxumSession, AxumPgPool, AxumSessionConfig, AxumSessionStore, AxumSessionLayer, AxumSessionMode};
use axum::{
Router,
routing::get,
};
#[tokio::main]
async fn main() {
let session_config = AxumSessionConfig::default()
.with_table_name("test_table").with_mode(AxumSessionMode::AcceptedOnly);
let session_store = AxumSessionStore::<AxumPgPool>::new(None, session_config);
session_store.initiate().await.unwrap();
let app = Router::new()
.route("/greet", get(greet))
.layer(AxumSessionLayer::new(session_store));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
tracing::debug!("listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
async fn greet(session: AxumSession<AxumPgPool>) -> String {
let mut count: usize = session.get("count").await.unwrap_or(0);
session.set_store(true).await;
count += 1;
session.set("count", count).await;
count.to_string()
}