4 个稳定版本

3.0.0 2022 年 8 月 21 日
2.1.0 2022 年 8 月 21 日
2.0.0 2020 年 12 月 22 日
1.0.0 2020 年 7 月 31 日

#260 in HTTP 服务器

每月 23 次下载

MIT/Apache

16KB
108

async-mongodb-session

为 MongoDB 实现的异步会话

安装

$ cargo add async-mongodb-session

概述

此库利用了 mongodb 中的文档过期功能,并基于 特定时钟时间

当创建新的会话对象时,将应用过期索引到集合中。

由于文档过期是一个 后台任务,数据库中可能存在一些过期的会话,但此库不会返回这些会话。

tide 示例

创建一个跟踪用户访问的会话的 HTTP 服务器。

#[async_std::main]
async fn main() -> tide::Result<()> {
    tide::log::start();
    let mut app = tide::new();

    app.with(tide::sessions::SessionMiddleware::new(
        MongodbSessionStore::new("mongodb://127.0.0.1:27017", "db_name", "collection").await?,
        std::env::var("TIDE_SECRET")
            .expect(
                "Please provide a TIDE_SECRET value of at \
                      least 32 bytes in order to run this example",
            )
            .as_bytes(),
    ));

    app.with(tide::utils::Before(
        |mut request: tide::Request<()>| async move {
            let session = request.session_mut();
            let visits: usize = session.get("visits").unwrap_or_default();
            session.insert("visits", visits + 1).unwrap();
            request
        },
    ));

    app.at("/").get(|req: tide::Request<()>| async move {
        let visits: usize = req.session().get("visits").unwrap();
        Ok(format!("you have visited this website {} times", visits))
    });

    app.at("/reset")
        .get(|mut req: tide::Request<()>| async move {
            req.session_mut().destroy();
            Ok(tide::Redirect::new("/"))
        });

    app.listen("127.0.0.1:8080").await?;

    Ok(())
}

测试

测试依赖于运行在本地机器或远程的运行实例的 mongodb。在本地快速启动实例的最快方法是使用以下 docker 命令

$ docker run -d -p 27017:27017 -v ~/data:/data/db mongo:4.2

然后可以使用以下命令执行测试

$ cargo test

mongodb 实例的默认设置设置为 127.0.0.1:27017,但可以通过设置 HOST 和 PORT 环境变量来覆盖它。

$ HOST=mymongo.com PORT=1234 cargo test

安全性

这个包使用 #![deny(unsafe_code)] 来确保所有内容都在 100% 安全的 Rust 中实现。

贡献

想要加入我们吗?查看我们的"贡献"指南并查看一些这些问题

许可证

在您的选择下,根据Apache 许可证,版本 2.0MIT 许可证进行许可。
除非您明确表示否则,根据 Apache-2.0 许可证的定义,您提交的任何有意包含在此包中的贡献,都将根据上述许可双重许可,不附加任何额外条款或条件。

依赖关系

~26–40MB
~761K SLoC