从 0 到 1 落地:Rust + Salvo 实现用户系统与 Bug 管理系统

从 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

三、系统架构与模块

核心模块

  1. 用户认证模块(注册、登录、JWT)
  2. 用户管理模块(信息、密码)
  3. Bug 管理模块(增删改查、状态、文件)
  4. 文件上传下载模块
  5. Redis 缓存模块
  6. 权限中间件

项目结构

复制代码
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+

七、项目亮点

  1. 极高性能:Rust 异步 + Salvo 轻量架构
  2. 安全可靠:JWT + 密码加密 + 权限控制
  3. 生产可用:缓存、日志、文件、分页齐全
  4. 二次开发简单:模块化结构,可快速扩展成云控、后台管理系统

八、未来扩展

  • 邮件通知
  • 评论与回复
  • 标签与优先级
  • 团队协作

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 是一个体验非常成熟、生产可用的优质选择。

相关推荐
独自破碎E1 小时前
【滑动窗口】BISHI47 交换到最大
java·开发语言·javascript
剑亦未配妥1 小时前
CSS 折叠引发的 scrollHeight 异常 —— 一次 Blink 引擎的诡异 Bug
前端·css·bug
道法自然|~1 小时前
BugCTF列移位密码(原理+C语言实现)
c语言·开发语言
拳里剑气1 小时前
C++:封装红黑树实现map和set
开发语言·数据结构·c++·学习方法
xyq20242 小时前
Bootstrap5 滚动监听
开发语言
沐知全栈开发2 小时前
SQL PRIMARY KEY(主键)
开发语言
桂花很香,旭很美2 小时前
[7天实战入门Go语言后端] Day 0:预习——关键词、语法与常用包一览
开发语言·后端·golang
gfdgd xi2 小时前
GXDE OS 25.3.1 更新了!修复更多 bug 了!
linux·c++·操作系统·bug·deepin
沐知全栈开发2 小时前
PHP HTTP详解
开发语言