JWT 登录注册
这节要解决什么
搞懂「注册存密码、登录发令牌、之后请求带令牌证明身份」这条最常见链路。
先用大白话
网站怎么知道「你是谁」?
常见一种:
- 注册:邮箱 + 密码 → 密码 哈希 后存库(绝不明文)
- 登录:校验密码 → 发一枚 JWT(一串签名过的令牌)
- 之后请求:Header 带
Authorization: Bearer <token> - 服务器验证签名,取出里面的用户 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 先存着,下一节访问受保护接口要用。
安全底线(务必记住)
- 密码不能明文存储
JWT_SECRET要够长、别提交到 Git- 生产环境用 HTTPS
- 登录失败不要提示「是邮箱错了还是密码错了」到过于具体(可统一「账号或密码错误」)
验收清单
- 能走通注册 → 登录 → 拿到 token
- 知道密码库里不是明文
- 知道后续请求怎么带 Bearer token
下一节 → 02-Guard与权限思路.md