feat: analysis user auth and ws

This commit is contained in:
zzw
2026-10-15 09:23:07 +08:00
parent 6fa185003d
commit a65b6d2803
102 changed files with 4966 additions and 786 deletions
+57 -14
View File
@@ -214,24 +214,30 @@ func createWechatCredentials(tx *gorm.DB, userId int64, openid, unionid, subject
return nil
}
func issueLoginToken(ctx context.Context, jwtAuth *config.JWTAuth, saleSvcName string, row *dao.UserRow, client *dao.Client) (*dao.Token, error) {
func loadUserClientBizId(userId int64, clientCode string) (int64, error) {
var row dao.UserClient
err := model.UserClientModel{}.Init().GetOne(modelbase.Params{
Eq: map[string]string{
"user_id": strconv.FormatInt(userId, utils.NumberTen),
"client_code": clientCode,
"status": strconv.Itoa(int(dao.StatusEnabled)),
},
}, &row)
if err != nil {
return utils.NumberZero, err
}
return row.BizId, nil
}
func issueLoginToken(ctx context.Context, jwtAuth *config.JWTAuth, row *dao.UserRow, client *dao.Client) (*dao.Token, error) {
if jwtAuth == nil || jwtAuth.Access == nil || jwtAuth.Refresh == nil {
return nil, errors.New("jwt not initialized")
}
mobile := decryptMobile(row.Mobile)
var saleId int64
if client.Type == dao.TypeSale {
saleInfo, err := fetchSaleByUserId(ctx, saleSvcName, row.Id)
if err != nil {
return nil, err
}
if saleInfo != nil {
saleId = saleInfo.Id
}
mobile, _ := utils.DecryptPhone(row.Mobile)
session := toSession(*row, mobile, client)
if err := fillSessionBizIds(ctx, &session, row.Id, client); err != nil {
return nil, err
}
session := toSession(*row, mobile, client, saleId)
ret, err := buildJwtToken(jwtAuth, session)
if err != nil {
return nil, err
@@ -241,3 +247,40 @@ func issueLoginToken(ctx context.Context, jwtAuth *config.JWTAuth, saleSvcName s
}
return &ret, nil
}
func fillSessionBizIds(ctx context.Context, session *dao.UserLoginSession, userId int64, client *dao.Client) error {
switch {
case client.Type == dao.TypeSale:
saleInfo, err := fetchSaleByUserId(ctx, utils.GetConfigString("services.sale"), userId)
if err != nil {
return err
}
if saleInfo != nil {
session.BizId = saleInfo.Id
}
case client.Type == dao.TypeStore:
bizId, err := loadUserClientBizId(userId, client.Code)
if err != nil {
return err
}
if bizId < utils.NumberOne {
return nil
}
storeInfo, err := fetchStoreById(ctx, utils.GetConfigString("services.store"), bizId)
if err != nil {
return err
}
if storeInfo != nil {
session.BizId = storeInfo.Id
}
default:
bizId, err := loadUserClientBizId(userId, client.Code)
if err != nil {
return err
}
if bizId > utils.NumberZero {
session.BizId = bizId
}
}
return nil
}