Skip to content

050. 用户注册认证配置与基础模型测试

学习目标

这一节进入用户注册、认证配置和基础模型测试。

学完后,你应该能理解:

  • 注册时为什么不能明文存密码;
  • 密码哈希为什么不能直接解密;
  • 激活账号 token 的用途;
  • JWT 配置项为什么要放进环境变量;
  • 本地调试为什么可能临时关闭全局 token 校验;
  • 为什么要给基础模型转换能力写测试。

注册的基本流程

用户注册时会提交用户名和密码。

后端不能把明文密码直接存进数据库。

更合理的流程是:

  1. 接收用户名和密码;
  2. 校验参数;
  3. 对密码做哈希;
  4. 把用户名和哈希后的密码写入用户表。

数据库里保存的是密文,不是用户输入的原始密码。

密码哈希

密码哈希通常不可逆。

也就是说,后端不能从哈希值还原出原始密码。

登录时的验证方式不是“解密数据库密码”,而是用同一个验证工具判断:

  • 用户输入的明文密码;
  • 数据库里保存的哈希值;

这两者是否匹配。

同一个明文密码每次生成的哈希值也可能不一样。

这是正常现象。

哈希工具会通过内部规则完成验证。

账号激活 token

注册后常见流程是给用户发送激活链接。

链接里会带一个激活账号用的 token。

用户点开链接后,后端根据 token 激活账号。

真实业务里,邮件、短信、微信登录、微信支付等能力通常都需要企业资质。

课程项目先采用更简单的方式:注册接口直接返回激活地址,让学习流程可以继续推进。

JWT 配置

认证相关配置放在环境变量里。

常见配置包括:

  • JWT 签名密钥;
  • JWT 算法;
  • access token 过期时间;
  • refresh token 过期时间;
  • 激活 token 过期时间;
  • 是否启用全局 token 校验;
  • 白名单接口路径。

这些配置会被读取到 app_config 或对应配置对象里。

签名密钥

签名密钥用来生成和校验 token。

只要密钥没有泄漏,别人就很难伪造合法 token。

如果密钥泄漏,需要重新生成密钥并重启服务。

这样旧 token 会失效,用户需要重新登录。

这会带来影响,但比继续使用泄漏密钥更安全。

全局 token 校验

线上环境通常要开启全局 token 校验。

本地调试时,有时会临时关闭。

关闭后,中间件不会检查每个接口的 token,有利于调试某些业务接口。

但这只是本地便利。

涉及真实用户和线上数据时,认证校验必须保持开启。

白名单接口

不是所有接口都应该要求登录。

例如:

  • 登录接口;
  • 注册接口;
  • 激活账号接口;
  • 健康检查接口。

这些接口可以放到白名单里。

白名单文件用于告诉中间件:这些路径不做 token 校验。

基础模型转换测试

项目里的基础模型会提供对象和字典之间的转换能力。

例如把模型实例转成字典时,需要处理:

  • 字段命名;
  • 时间字段;
  • 默认字段;
  • 驼峰命名;
  • 下划线命名。

这种能力很基础,但很容易在后续重构时被破坏。

所以需要写测试验证转换结果。

为什么测试很繁琐

测试代码有时不比业务代码短。

因为测试要明确写出:

  • 构造什么对象;
  • 期望哪些字段;
  • 不期望哪些字段;
  • 字段名应该是什么格式;
  • 时间值如何比较。

它繁琐,但能帮你固定住基础能力。

这一节的重点

这一节把认证系统需要的配置和基础能力先铺好。

你需要记住:

  • 密码不能明文保存;
  • 哈希密码不能直接解密,但可以验证;
  • token 依赖签名密钥;
  • 本地调试便利不能替代线上安全;
  • 基础模型转换值得写测试保护。

AI Agent 课程学习文档。