package auth import ( "net/http" "strings" "videoweb/app/middleware/reptilerecord" "videoweb/app/service/authser" "videoweb/pub/common" "videoweb/pub/common/enum/consts" "videoweb/pub/common/ipaddr" "videoweb/pub/common/log" "videoweb/pub/common/srvdef" "videoweb/pub/pubdef" "github.com/gin-gonic/gin" ) // gin 用户识别中间件:不再校验 token,按 X-User-Agent 中的 devID 识别用户, // 该设备首次访问时自动创建用户。没有 devID 的请求按匿名处理, // 需要用户身份的接口自行返回"请先登录"。 func Auth(ctx *gin.Context) { if reptilerecord.IsBot(ctx) { ctx.Set(consts.CtxUserID, pubdef.CrawlerUserId) return } ua, err := common.GetUA(ctx) if err != nil || strings.TrimSpace(ua.DevID) == "" { return } userId, serr := authser.ResolveDeviceUser(ctx, ua, ipaddr.ResolveClientIP(ctx), ctx.GetHeader("channel")) if serr != nil { if serr.Code == srvdef.AccountErrAccessForbid { ctx.AbortWithStatusJSON(http.StatusOK, gin.H{ "code": serr.Code, "msg": serr.Code.Msg(), }) return } log.Error("Auth:ResolveDeviceUser", log.Any("devID", ua.DevID), log.Any("path", ctx.Request.URL.Path), log.E(serr)) return } ctx.Set(consts.CtxUserID, userId) }