feat: analysis user auth and ws
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user