Skip to content

auth 模块

认证入口模块。承担登录(密码 / 短信 / 邮箱 / 社交,按策略分派)、登出、验证码生成、第三方社交绑定 / 回调 / 解绑。所有端点均为 public 或 CheckLogin,不使用 CheckPermission、oplog、repeatsubmit。AuditContext 已挂载但当前为惰性。

路由表

前缀:standalone /auth,modular ""。探针:GET /auth/ping(standalone)/ GET /ping(modular)。

组中间件顺序:plugin.TokenInterceptor()loginhelper.AuditContext()(顺序敏感——AuditContext 读取 TokenInterceptor 解析出的登录态)。

方法路径鉴权中间件Handler
POST/loginpublic(sagin.Ignore()ENCAuthApiApp.Login
POST/logoutpublic(sagin.Ignore()AuthApiApp.Logout
GET/codepublic(sagin.Ignore()ratelimiter.RateLimiter(1m,10,LimitTypeIP,0,"")AuthApiApp.Code
GET/binding/:sourcepublic(sagin.Ignore()AuthApiApp.Binding
POST/social/callbackCheckLoginAuthApiApp.SocialCallback
DELETE/unlock/:socialIdCheckLoginAuthApiApp.UnlockSocial
GET/pingpublic(sagin.Ignore()inline {"module":"auth",...}

中间件图例:OP=oplog.LogRS=repeatsubmit.RepeatSubmit(0,"")ENC=encrypt.ApiEncrypt()

Services

位于 internal/auth/service/

Service(单例)职责
AuthServiceAuthSvcApp登录分发器——按 grantType 从 map 选 AuthStrategy(password/sms/email/social),委派执行。
SysLoginServiceSysLoginSvcApp装配 LoginUser 会话上下文,填充终端信息(IP、地区、浏览器、OS)。
passwordAuthStrategy密码登录——校验账号 + 密码,签发 token。
smsAuthStrategy短信验证码登录——从 Redis 取码校验,按客户端配置签发 token。
emailAuthStrategy邮箱验证码登录——校验码并签发 token。
socialAuthStrategy第三方登录——用 socialCode + socialState 换取社交资料,解析绑定的系统用户,签发 token。无重试计数器(state+code 交换即守卫)。

设计要点

TIP

/login 包裹 encrypt.ApiEncrypt()——请求体在 handler 读取前先解密。/code 按 IP 限流 10 次/分钟。

社交绑定拆分:binding/:source public(登录页在会话建立前需要跳转 URL),callback / unlock 需要已登录用户。

全模块无 CheckPermission / oplog / repeatsubmit。

相关文档

基于 MIT 协议开源