package svc import ( "applet/app/db" "applet/app/db/model" "applet/app/e" "applet/app/md" "applet/app/utils" "applet/app/utils/cache" "applet/app/utils/logx" "errors" "fmt" "github.com/gin-gonic/gin" "strings" ) // GetDefaultUser is 获取默认账号,uid =0 为系统默认账号,用于一些请求需要渠道id之类的东西 func GetDefaultUser(c *gin.Context, token string) (*md.User, error) { user := new(md.User) if c.GetString("convert_url") == "1" { //转链接口 goto DEFALUT } else { // Token 不为空时拿对应的用户数据 if token != "" && strings.Contains(token, "Bearer") { user, err := CheckUser(c) if user == nil { return nil, errors.New("token is expired") } if err != nil { // 有报错自己拿默认用户 goto DEFALUT } return user, nil } } DEFALUT: // 默认拿uid 等于0的用户数据 profile, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], 0) if err != nil { return nil, err } info, err := db.UserFindByID(db.DBs[c.GetString("mid")], 0) if err != nil { return nil, err } ul, err := db.UserLevelInIDescByWeightLowWithOne(db.DBs[c.GetString("mid")]) if err != nil { return nil, err } user.Info = info user.Profile = profile user.Level = ul return user, nil } func FastLoginUserExist(c *gin.Context, r *md.LoginResponse, requestBody *md.FastLoginRequestBody) error { // 每次登录都会刷新token var user = &model.User{} var err error if requestBody.Mobile != "" { user, err = db.UserFindByMobileAll(db.DBs[c.GetString("mid")], requestBody.Mobile) } if user == nil || user.Uid == 0 { return e.NewErr(400, "用户不存在") } if err != nil { return err } if user.DeleteAt == 1 { return e.NewErr(403053, "账号被删除,如有疑问请联系客服") } //判断用户是否虚拟账号 虚拟账号不能用手机号登陆 if user.IsFake == 1 { return e.NewErr(400000, "该手机号无法登陆,请联系客服!") } //0未激活,1正常,2冻结 switch user.State { case 0: return e.NewErr(403028, "no active") case 2: return e.NewErr(403029, "您的账号已被冻结") } // 生成jwt appName := db.SysCfgGet(c, "app_name") profile, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], user.Uid) if err != nil || profile == nil { _ = logx.Warn(err) return e.NewErr(400000, "数据不完整") } token := CheckUserToken(c, user, appName) r.Token = token r.UserID = utils.IntToStr(user.Uid) r.UserName = requestBody.Mobile r.Phone = requestBody.Mobile // 更新 profile.ArkidToken = token _, err = db.UserProfileUpdate(db.DBs[c.GetString("mid")], user.Uid, profile) if err != nil { return logx.Warn(err) } // 写入缓存 key := fmt.Sprintf("%s:token:%s", c.GetString("mid"), user.Username) _, err = cache.SetEx(key, token, 39528000) // 半年 if err != nil { return logx.Warn(err) } return nil } func CheckUserToken(c *gin.Context, user *model.User, appName string) string { profile, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], user.Uid) if err != nil { e.OutErr(c, e.ERR_DB_ORM, err) return "" } token := profile.ArkidToken _, err = utils.ParseToken(token) if err != nil { token, _ = utils.GenToken(user.Uid, user.Username, user.Phone, appName, "", "") // 更新 profile.ArkidToken = token _, err = db.UserProfileUpdate(db.DBs[c.GetString("mid")], user.Uid, profile) // 写入缓存 key := fmt.Sprintf("%s:token:%s", c.GetString("mid"), user.Username) _, err = cache.SetEx(key, token, 39528000) // 半年 } return token }