1 个不稳定版本
0.1.0 | 2024年3月8日 |
---|
#523 在 HTTP服务器
13KB
225 行
actix_session_mongodb
一个用于actix-session的库,实现了MongoDB的SessionStore特质。
**不是actix的官方库**!
支持
此库是为我的一个项目构建的,因此仅针对我的特定用例进行了测试。我将尽力支持其他用例,所以请为遇到的问题提交问题,但这更多的是“尽力而为”的支持,而不是全面的支持。
此库的测试不是很充分,所以请自行承担风险。您可能也不应该在您的生产环境中使用此库,但我不是您的老板,所以您想怎么做就怎么做。
最低支持的Rust版本 (MSRV): 1.63
示例用法
您可以使用MongoSessionStore类似于CookieSessionStore或RedisSessionStore,但您必须首先连接并检查您的数据库
#[actix_web::main]
async fn main() -> std::io::Result<()> {
let client = mongodb::Client::with_uri_str(&uri).await.expect("failed to connect");
let db = client.database("database_name");
let mongo_session_store = actix_session_mongodb::connect_and_init(&db, "Sessions").await?;
HttpServer::new(move || {
App::new()
.app_data(...)
// Install the identity framework first.
.wrap(
IdentityMiddleware::builder()
.logout_behaviour(actix_identity::config::LogoutBehaviour::PurgeSession)
.build(),
)
// 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::builder(mongo_session_store.clone(), secret_key.clone())
.session_lifecycle(
PersistentSession::default()
.session_ttl(Duration::days(2))
.session_ttl_extension_policy(
actix_session::config::TtlExtensionPolicy::OnEveryRequest,
),
)
.build(),
)
.service(...)
})
// Use OS's keep-alive (usually quite long)
.keep_alive(actix_web::http::KeepAlive::Os)
.bind(bind_addr)?
.run()
.await
}
依赖项
~31–43MB
~866K SLoC