从 0 到 1 落地:Rust + Salvo 实现用户系统与 Bug 管理系统
一、前言
在后端开发中,用户认证、权限管理、问题(Bug)追踪是几乎所有系统的基础模块。
本文将基于 Rust + Salvo 从 0 到 1 实现一套高性能、安全、生产可用的:
- 用户认证与权限系统
- Bug 管理(上报、查询、状态流转、删除)
- 文件上传下载
- Redis 缓存
- JWT 鉴权
全程前后端分离,可直接用于企业后台、云控平台、内部管理系统。
二、技术栈
后端
- Rust 1.70+
- Salvo Web 框架
- SQLx + PostgreSQL
- Redis 缓存
- JWT 身份认证
- bcrypt 密码加密
前端
- Vue3 + TypeScript
- Naive UI
- Pinia
- Axios
三、系统架构与模块
核心模块
- 用户认证模块(注册、登录、JWT)
- 用户管理模块(信息、密码)
- Bug 管理模块(增删改查、状态、文件)
- 文件上传下载模块
- Redis 缓存模块
- 权限中间件
项目结构
userregist/
├── frontend/ # 前端 Vue3
├── user-registration-system/ # 后端 Rust
│ ├── src/
│ │ ├── routers/ # 路由
│ │ ├── models/ # 数据模型
│ │ ├── hoops/ # 中间件(鉴权、日志)
│ │ ├── config/ # 配置
│ │ ├── db/ # PG 连接
│ │ ├── redis/ # Redis
│ │ └── log/ # 日志
│ ├── Cargo.toml
│ └── config.toml
四、核心功能实现
1. 用户认证系统(JWT)
1.1 注册
- 邮箱/用户名唯一性校验
- bcrypt 加密密码
- 返回 JWT
1.2 登录
- 校验账号密码
- 生成 24h JWT
- 记录登录状态
1.3 JWT 生成核心代码
rust
pub async fn get_token(user_id: &str) -> Result<(String, i64), anyhow::Error> {
let config = config::get();
let exp = OffsetDateTime::now_utc() + Duration::seconds(config.jwt.expiry);
let claims = Claims {
sub: user_id.to_string(),
exp: exp.unix_timestamp(),
};
let token = encode(
&Header::default(),
&claims,
&EncodingKey::from_secret(config.jwt.secret.as_bytes())
)?;
Ok((token, exp.unix_timestamp()))
}
2. 权限中间件
使用 Salvo 的 hoop 机制实现全局鉴权:
rust
pub async fn auth_hoop(req: &mut Request, depot: &mut Depot, next: Next<'_>) -> Result<Response, Error> {
// 从 header 获取 token
// 校验 token 有效性
// 将 user_id 存入 depot
next.run(req, depot).await
}
3. Bug 管理系统
3.1 Bug 上报
- 文本描述 + 文件上传
- 自动生成 Bug ID
- 状态默认为 pending
3.2 Bug 列表(带 Redis 缓存)
rust
let cache_key = format!(
"bug_list:{}_{}_{}_{}",
user_id, page, page_size, status
);
// 先查缓存
if let Ok(Some(data)) = redis_ops::get(&cache_key).await {
return json_ok(serde_json::from_str(&data)?);
}
// 查数据库
// ...
// 写入缓存
let _ = redis_ops::set(&cache_key, &json, 300).await;
3.3 状态管理
支持:
- pending
- resolved
- rejected
- fixed
管理员可修改所有状态,用户仅可看自己的。
3.4 文件上传与下载
- 按用户 ID/项目名存储
- 安全校验
- 下载权限控制
五、Salvo 框架使用体验
优点
- 路由声明式、简洁优雅
- 中间件机制清爽(hoop)
- 异步原生、性能极高
- 类型安全,编译期防错
路由示例
rust
Router::with_path("api")
.push(
Router::with_path("auth")
.post(register)
.post(login)
)
.push(
Router::with_path("bug")
.hoop(auth_hoop)
.get(list)
.post(upload)
.put(status)
.delete(remove)
);
六、部署与运行
后端
bash
cargo build --release
./target/release/user-registration-system
前端
bash
npm install
npm run build
依赖环境
- PostgreSQL 9.6+
- Redis 6.0+
- Rust 1.70+
- Node.js 16+
七、项目亮点
- 极高性能:Rust 异步 + Salvo 轻量架构
- 安全可靠:JWT + 密码加密 + 权限控制
- 生产可用:缓存、日志、文件、分页齐全
- 二次开发简单:模块化结构,可快速扩展成云控、后台管理系统
八、未来扩展
- 邮件通知
- 评论与回复
- 标签与优先级
- 团队协作
Rust + Salvo 框架实际开发体验感受
在这套用户系统与 Bug 管理系统的完整开发过程中,Rust 搭配 Salvo 框架给我的整体体验非常稳定、高效且省心。
首先,Salvo 的路由设计非常直观,支持链式声明式路由,代码结构一目了然,大型项目也能保持清晰,不像一些 Rust Web 框架那样需要写大量模板代码。中间件机制(hoop)简洁易用,鉴权、日志、跨域等逻辑可以非常干净地抽离,不侵入业务代码,非常适合做后台管理类系统。
其次,Rust 的类型安全 + Salvo 的强类型提取,让接口参数、请求体、路径参数在编译期就能完成校验,上线后几乎不会出现因为参数类型错误、空指针导致的崩溃,这对生产环境非常友好。配合 SQLx 的编译期 SQL 校验,整个后端的稳定性非常高。
性能方面,Salvo 原生异步、底层轻量、开销极低,在同样硬件条件下,接口响应速度明显快于其他脚本语言框架,配合 Redis 缓存后,高并发下的表现依旧稳定,CPU 和内存占用都很低,非常适合长期运行的后端服务。
另外,Salvo 的文档和示例足够完善,常见场景如文件上传下载、JSON 响应、静态资源、错误处理都有现成方案,上手成本不高。对于习惯了 Gin、Echo 这类风格的开发者来说,Salvo 会非常亲切,学习曲线平滑。
总体来说:
Rust 提供安全与性能,Salvo 提供简洁与效率,两者搭配非常适合做高性能后台、权限系统、管理平台、API 服务等中长期项目。如果你想使用 Rust 做 Web 后端,Salvo 是一个体验非常成熟、生产可用的优质选择。