- NestJS + TypeScript + Prisma + PostgreSQL 工程骨架 - 微信登录安全流程:服务端 code2Session 换 openid 后签发 JWT, session_key 缓存于 Redis,不信任前端 openid - 统一响应/异常处理、JWT 全局鉴权(@Public 豁免)、Swagger 文档 - Prisma 全量核心 schema(用户/分类/商品/设计清单/地址/订单/支付/上传/定制任务)+ seed - 业务模块空壳(商品/分类/设计清单/地址/订单/支付/上传/BullMQ 队列) - Docker 多阶段镜像 + 本地/生产 docker-compose - docs:密钥获取指南、COS SDK 移除记录 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.3 KiB
4.3 KiB
密钥与配置获取指南
本项目的敏感配置全部通过环境变量(.env)注入,绝不允许提交进仓库。
以下说明各项值的来源与获取方式。
⚠️ 安全提醒:任何密钥都不要写入代码、提交到 git,或发给第三方。 妥善保管,生产环境与本地环境分离。
1. JWT_SECRET(JWT 签名密钥)
- 是什么:用于签名/校验登录 access token 的对称密钥(≥16 位,建议 64 位十六进制)。
- 哪里来:本地自行生成,无第三方。用系统安全随机数生成:
# 方式一:openssl
openssl rand -hex 64
# 方式二:node
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
- 要求:每次输出粘贴到
.env的JWT_SECRET=即可。生产必须换成新的高熵随机串, 与本地/测试完全区分;切勿使用示例值。 - 注意:更换后所有已签发的 token 会立即失效(用户需重新登录),属预期行为。
2. WX_APPID / WX_SECRET(微信小程序凭证)
- 是什么:小程序唯一标识(AppID)与对应的 AppSecret。
- 哪里来:微信公众平台(https://mp.weixin.qq.com)。
- 登录后,进入「小程序」→ 左侧「开发」→「开发管理」→「开发设置」。
- 页面顶部「AppID(小程序ID)」即
WX_APPID。 - 「AppSecret(小程序密钥)」需点击「生成/重置」获取,生成后仅显示一次,请立即保存。
- 安全要点:AppSecret 仅存于服务端,绝不写入小程序代码或随请求下发。
本项目
code2Session使用服务端持有的 appid+secret 调微信换取 openid。
3. 微信支付相关(WX_MCH_*,预留,当前为空)
骨架阶段支付功能为占位,暂无必填。上线支付时按以下获取:
- WX_MCH_ID(商户号):微信支付商户平台申请开通后获得。
- WX_MCH_API_V3_KEY(APIv3 密钥):商户平台 →「账户中心」→「API安全」→「APIv3密钥」设置。
- WX_MCH_SERIAL_NO(商户证书序列号):商户平台「API安全」→「申请API证书」后,在 证书详情中查看序列号。
- WX_MCH_PRIVATE_KEY_PATH(商户私钥):申请 API 证书时下载的私钥文件,存放于
服务端的
key/目录(已被 gitignore 忽略)。 - WX_PAY_NOTIFY_URL(支付回调地址):需为公网可访问的 HTTPS 地址,如
https://your-domain/api/payments/notify。
前置条件:小程序需完成微信支付商户号绑定与经营资质审核。
4. COS(腾讯云对象存储,COS_*,当前为空)
骨架阶段 COS 为占位(SDK 已移除,见
docs/cos-sdk-removal.md)。接入时获取:
- COS_BUCKET / COS_REGION:
- 腾讯云控制台 →「对象存储 COS」→「存储桶列表」。
- 创建/选择存储桶,桶名称即
COS_BUCKET(形如wxmp-125xxxxxxx)。 - 桶所在地域即
COS_REGION(形如ap-guangzhou)。
- COS_SECRET_ID / COS_SECRET_KEY:
- 腾讯云控制台 →「访问管理 CAM」→「访问密钥」→「API 密钥管理」。
- 新建/查看密钥,SecretId 与 SecretKey 填入对应变量。
- 生产建议用子账号 / 临时密钥(STS),权限最小化,主账号密钥仅本地调试用。
5. 数据库与 Redis(DATABASE_URL / REDIS_URL)
- DATABASE_URL:PostgreSQL 连接串,格式
postgresql://<user>:<password>@<host>:<port>/<db>?schema=public。- 本地开发(docker compose)默认:
postgresql://postgres:postgres@localhost:5432/wxmp?schema=public - 生产改为真实主机/账号/密码,并避免在 URL 中明文存弱口令。
- 本地开发(docker compose)默认:
- REDIS_URL:Redis 连接串,格式
redis://[:password]@<host>:<port>。 生产若开启认证/加密,按需补充。
快速核对清单
| 变量 | 必须 | 来源 |
|---|---|---|
JWT_SECRET |
✅ 生产必须换 | 本地 openssl rand -hex 64 |
WX_APPID / WX_SECRET |
✅ | 微信公众平台·开发设置 |
DATABASE_URL |
✅ | 自建 PostgreSQL |
REDIS_URL |
✅ | 自建 Redis |
WX_MCH_* |
支付时 | 微信支付商户平台 |
COS_* |
COS 接入时 | 腾讯云控制台(COS/CAM) |
部署前请在服务器上用工具生成独立的随机密钥,不要把本地 .env 原样搬上生产。