#web-framework #backend-web #web #框架 #后端 #cookies

actix_session_mongodb

一个用于actix-session的库,实现了MongoDB的SessionStore特质。

1 个不稳定版本

0.1.0 2024年3月8日

#523HTTP服务器

AGPL-3.0-or-later

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