Files
sundynix-pets/deploy/.env.example
T
Blizzard 9adafb1354 feat(auth): access token 缩到 2 小时 + refresh token 机制
后台登录框原来预填了 sundynix/sundynix,等于把凭证写在页面上,去掉。

令牌改为 access(2h) + refresh 两段式:
- 新表 sundynix_refresh_tokens,只存 sha256,明文只在签发时返回一次
- 有效期:小程序 30 天、后台 7 天
- 新接口 /api/auth/refresh|logout、/api/admin/refresh|logout

安全约定:
- 每次续期都轮换刷新令牌,旧的立即作废
- 作废后 60 秒内再到达算并发重试放行,超过则判定泄露、吊销该账号全部会话
- 主动退出与被连坐吊销的令牌不吃宽限期,否则「吊销全部」形同虚设
- 禁用用户时一并吊销刷新令牌,最多 2 小时彻底失去访问

两端请求层都做了单飞续期:并发请求同时 401 只发一次 refresh,
否则刷新令牌会被并发轮换掉互相打架。小程序续期失败回退 wx.login,
登录/续期请求标 noAuthRetry,避免登录失败(同样返回 40100)触发自我套娃。

顺带修掉 vite 代理仍指向 8080 的遗留(端口早已改 9090)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 09:38:19 +08:00

63 lines
2.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 肉垫计划 · 服务器环境变量
# 用法:cp .env.example .env && vi .env
# .env 只放在服务器 /home/workspace/sundynix-pet 下,不进 gitCI 也不会覆盖它。
# ── 外部 MySQL ──
# 注意:容器里的 127.0.0.1 是容器自己。若 MySQL 装在宿主机上,
# 填 host.docker.internal 并在 compose 里加 extra_hosts,或直接填内网 IP。
MYSQL_HOST=192.168.100.127
MYSQL_PORT=3307
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=sundynix_pet
# ── 外部 MinIO(对象存储 / 图片) ──
# ⚠️ 这是多个服务共用的 MinIO 实例(sundynix-agent / sundynix-plant 等也在用):
# 1) BUCKET 必须填本项目自己的桶,填错别的服务的桶会污染人家数据;
# 2) 强烈建议不要用 root 凭据,另开一个只能访问 sundynix-pet 的账号:
# mc admin user add <alias> pets-svc <强密码>
# mc admin policy create <alias> pets-only pets-only.json # 只授权 sundynix-pet
# mc admin policy attach <alias> pets-only --user pets-svc
# 3) 桶已存在时程序不会修改其访问策略;图片直链需要该桶为 public-read
# 这一项由运维一次性配好。
# ENDPOINT 是「写入」用的 MinIO API 地址:内网直连、不带协议、不走 nginx。
# 公网等价地址是 162.14.122.200:3407(本机调试时可用,跨公网慢)。
MINIO_ENDPOINT=192.168.100.126:9000
MINIO_USE_SSL=false
MINIO_ACCESS_KEY=sundynix
MINIO_SECRET_KEY=sundynix
MINIO_BUCKET=sundynix-pet
# 图片对外地址,小程序直接加载它。正式版必须 https。
MINIO_PUBLIC_BASE_URL=https://res.sundynix.cn
# ── 登录鉴权 ──
JWT_SECRET=改成随机长字符串
# access token 有效期(小时)。短一点更安全,过期由前端拿 refresh token 静默续期
JWT_EXPIRE_HOURS=2
# 刷新令牌有效期:小程序 30 天、后台 7 天。到期才需要重新登录
JWT_REFRESH_EXPIRE_HOURS=720
JWT_ADMIN_REFRESH_EXPIRE_HOURS=168
# 生产必须 false,否则任何人都能用昵称直接登录
AUTH_DEV_LOGIN=false
# ── 微信小程序 ──
WECHAT_APP_ID=wx开头的AppID
WECHAT_APP_SECRET=小程序密钥
# ── 管理后台(/admin) ──
ADMIN_USERNAME=sundynix
ADMIN_PASSWORD=改成强密码
# ── AIprovider 中立,OpenAI 兼容协议) ──
AI_ENABLED=true
AI_PROVIDER=openai
AI_BASE_URL=https://api.deepseek.com
AI_API_KEY=sk-你的key
AI_MODEL=deepseek-chat
AI_TEMPERATURE=0.6
AI_MAX_TOKENS=1024
AI_TIMEOUT_SEC=30
# ── 镜像 tag(一般不用改,CI 推的是 latest) ──
TAG=latest