Go Web 脚手架
大约 1 分钟
目录结构
├── config/ # 配置加载
├── docs/ # Swagger文档
├── logger/ # 日志配置
├── util/ # 工具
├── internal/ # 项目内部代码
│ ├── core/ # 核心初始化
│ ├── ctrls/ # HTTP 路由和请求处理(Gin 的 handlers)
│ ├── service/ # 业务逻辑层
│ ├── repository/ # 数据访问层(数据库/外部API)
│ ├── middleware/ # 中间件(验证、跨域)
│ ├── router/ # HTTP 路由
│ └── model/ # 数据模型(DTO/Entity)
└── main.go # 应用入口
zap 日志
jwt
GORM
MySQL
Redis
token
登录验证
双 Access Token
用于验证登录,过期时间设置的比较短(15分钟)Refresh Token
用于刷新Access Token
,过期时间设置的比较长(7天)- 登录
- 生成双
Token
,保存Refresh Token
至Redis
(refresh:token:[Refresh Token]:[userId]
可进一步存储通过userId
找到Refresh Token
) Refresh Token
通过Set-Cookie (HttpOnly Secure)
返回,Access Token
通过Body
返回
- 生成双
- 登出
- 删除
Refresh Token
,并把Access Token
拉入黑名单(Redis
设置Access Token
剩余有效期一致的TLL
)
- 删除
- 验证
- 验证
Access Token
是否有效,有效则放行 Access Token
无效,则验证Refresh Token
是否生效,有效则生成新的双Token
返回给前端,且同时删除老的Refresh Token
(刷新Token
需要前端配合重新发起请求)
- 验证
- 未做
- 记录用户设备哈希 或者
IP
的哈希值,防止Token
被盗用
- 记录用户设备哈希 或者