在设备不存在分支注册后立即查询设备信息并赋值,避免后续操作解引用空指针 同时增加设备信息空指针保护并完善错误处理
This commit is contained in:
@@ -68,6 +68,7 @@ func (l *DeviceLoginLogic) DeviceLogin(req *types.DeviceLoginRequest) (resp *typ
|
||||
}()
|
||||
|
||||
// Check if device exists by identifier
|
||||
createdNewDevice := false
|
||||
deviceInfo, err := l.svcCtx.UserModel.FindOneDeviceByIdentifier(l.ctx, req.Identifier)
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
@@ -76,6 +77,7 @@ func (l *DeviceLoginLogic) DeviceLogin(req *types.DeviceLoginRequest) (resp *typ
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
createdNewDevice = true
|
||||
} else {
|
||||
l.Errorw("query device failed",
|
||||
logger.Field("identifier", req.Identifier),
|
||||
@@ -95,9 +97,28 @@ func (l *DeviceLoginLogic) DeviceLogin(req *types.DeviceLoginRequest) (resp *typ
|
||||
}
|
||||
}
|
||||
|
||||
// 根据 req 中的UA 更新UA
|
||||
deviceInfo.UserAgent = req.UserAgent
|
||||
_ = l.svcCtx.UserModel.UpdateDevice(l.ctx, deviceInfo)
|
||||
if createdNewDevice {
|
||||
deviceInfo, err = l.svcCtx.UserModel.FindOneDeviceByIdentifier(l.ctx, req.Identifier)
|
||||
if err != nil {
|
||||
l.Errorw("query device after register failed",
|
||||
logger.Field("identifier", req.Identifier),
|
||||
logger.Field("error", err.Error()),
|
||||
)
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "query device after register failed: %v", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
if deviceInfo != nil {
|
||||
deviceInfo.UserAgent = req.UserAgent
|
||||
if err := l.svcCtx.UserModel.UpdateDevice(l.ctx, deviceInfo); err != nil {
|
||||
l.Errorw("update device failed",
|
||||
logger.Field("user_id", userInfo.Id),
|
||||
logger.Field("identifier", req.Identifier),
|
||||
logger.Field("error", err.Error()),
|
||||
)
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseUpdateError), "update device failed: %v", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// Generate session id
|
||||
sessionId := uuidx.NewUUID().String()
|
||||
|
||||
Reference in New Issue
Block a user