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 次下载
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.0或MIT 许可证进行许可。除非您明确表示否则,根据 Apache-2.0 许可证的定义,您提交的任何有意包含在此包中的贡献,都将根据上述许可双重许可,不附加任何额外条款或条件。
依赖关系
~26–40MB
~761K SLoC