spring的技术笔记
学习鉴权与防护第 17 / 23 篇2 分钟阅读

JWT 登录注册

JWT 登录注册

这节要解决什么

搞懂「注册存密码、登录发令牌、之后请求带令牌证明身份」这条最常见链路。

先用大白话

网站怎么知道「你是谁」?

常见一种:

  1. 注册:邮箱 + 密码 → 密码 哈希 后存库(绝不明文)
  2. 登录:校验密码 → 发一枚 JWT(一串签名过的令牌)
  3. 之后请求:Header 带 Authorization: Bearer <token>
  4. 服务器验证签名,取出里面的用户 id

JWT 可以想成「服务器签发的临时工作证」,前端(Vue/Nuxt)存起来,请求时带上。

和 Cookie Session 的区别入门阶段只需知道:本项目用 JWT,方便前后端分离联调。

对着项目看

03-nest-bookmark-api 的 auth 模块:

  • POST /auth/register 注册
  • POST /auth/login 登录,返回 { accessToken }
  • 密码用 bcrypt 哈希
  • JWT 密钥来自环境变量 JWT_SECRET

试跑(服务先启动):

# 注册
curl -X POST http://localhost:3000/auth/register \
  -H 'Content-Type: application/json' \
  -d '{"email":"a@test.com","password":"12345678","name":"小明"}'
 
# 登录
curl -X POST http://localhost:3000/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"email":"a@test.com","password":"12345678"}'

把返回的 token 先存着,下一节访问受保护接口要用。

安全底线(务必记住)

  1. 密码不能明文存储
  2. JWT_SECRET 要够长、别提交到 Git
  3. 生产环境用 HTTPS
  4. 登录失败不要提示「是邮箱错了还是密码错了」到过于具体(可统一「账号或密码错误」)

验收清单

  • 能走通注册 → 登录 → 拿到 token
  • 知道密码库里不是明文
  • 知道后续请求怎么带 Bearer token

下一节 → 02-Guard与权限思路.md