fix(用户逻辑): 修复设备记录中丢失IP和UserAgent的问题
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 7m5s
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 7m5s
在删除账户和绑定邮箱逻辑中,保留原设备的IP和UserAgent信息
This commit is contained in:
parent
330b4ee6a1
commit
8086785828
@ -158,7 +158,15 @@ func (l *BindEmailWithVerificationLogic) BindEmailWithVerification(req *types.Bi
|
|||||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseDeletedError), "删除用户记录失败")
|
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseDeletedError), "删除用户记录失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = l.createDeviceRecordForEmailUser(emailUserId, deviceIdentifier, "")
|
// 获取原设备信息,以保留IP和UserAgent
|
||||||
|
oldDevice, err := l.svcCtx.UserModel.FindOneDeviceByIdentifier(l.ctx, deviceIdentifier)
|
||||||
|
var deviceIP, deviceUA string
|
||||||
|
if err == nil && oldDevice != nil {
|
||||||
|
deviceIP = oldDevice.Ip
|
||||||
|
deviceUA = oldDevice.UserAgent
|
||||||
|
}
|
||||||
|
|
||||||
|
err = l.createDeviceRecordForEmailUser(emailUserId, deviceIdentifier, deviceIP, deviceUA)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorw("创建邮箱用户设备记录失败", logger.Field("error", err.Error()), logger.Field("email_user_id", emailUserId))
|
l.Errorw("创建邮箱用户设备记录失败", logger.Field("error", err.Error()), logger.Field("email_user_id", emailUserId))
|
||||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "创建邮箱用户设备记录失败")
|
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "创建邮箱用户设备记录失败")
|
||||||
@ -212,14 +220,16 @@ func (l *BindEmailWithVerificationLogic) checkIfPureDeviceUser(ctx context.Conte
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 邮箱存在的情况:在 user_devices 中创建一条设备记录
|
// 邮箱存在的情况:在 user_devices 中创建一条设备记录
|
||||||
func (l *BindEmailWithVerificationLogic) createDeviceRecordForEmailUser(emailUserId int64, deviceIdentifier string, userAgent string) error {
|
func (l *BindEmailWithVerificationLogic) createDeviceRecordForEmailUser(emailUserId int64, deviceIdentifier, ip, userAgent string) error {
|
||||||
// online 默认 0 enabled 默认 1
|
// online 默认 0 enabled 默认 1
|
||||||
l.Infow("创建邮箱用户设备记录",
|
l.Infow("创建邮箱用户设备记录",
|
||||||
logger.Field("email_user_id", emailUserId),
|
logger.Field("email_user_id", emailUserId),
|
||||||
logger.Field("device_identifier", deviceIdentifier),
|
logger.Field("device_identifier", deviceIdentifier),
|
||||||
logger.Field("online", true),
|
logger.Field("online", true),
|
||||||
logger.Field("enabled", false),
|
logger.Field("enabled", false),
|
||||||
logger.Field("user_agent", userAgent))
|
logger.Field("user_agent", userAgent),
|
||||||
|
logger.Field("ip", ip),
|
||||||
|
)
|
||||||
|
|
||||||
err := l.svcCtx.UserModel.InsertDevice(l.ctx, &user.Device{
|
err := l.svcCtx.UserModel.InsertDevice(l.ctx, &user.Device{
|
||||||
UserId: emailUserId,
|
UserId: emailUserId,
|
||||||
@ -227,6 +237,7 @@ func (l *BindEmailWithVerificationLogic) createDeviceRecordForEmailUser(emailUse
|
|||||||
Online: false,
|
Online: false,
|
||||||
Enabled: false,
|
Enabled: false,
|
||||||
UserAgent: userAgent,
|
UserAgent: userAgent,
|
||||||
|
Ip: ip,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorw("创建邮箱用户设备记录失败", logger.Field("error", err.Error()), logger.Field("email_user_id", emailUserId))
|
l.Errorw("创建邮箱用户设备记录失败", logger.Field("error", err.Error()), logger.Field("email_user_id", emailUserId))
|
||||||
|
|||||||
@ -80,7 +80,7 @@ func (l *DeleteAccountLogic) DeleteAccount() (resp *types.DeleteAccountResponse,
|
|||||||
|
|
||||||
// 7. 为每个原设备创建新的用户(使用同一事务)
|
// 7. 为每个原设备创建新的用户(使用同一事务)
|
||||||
for _, oldDevice := range devices {
|
for _, oldDevice := range devices {
|
||||||
userInfo, err := l.registerUserAndDevice(tx, oldDevice.Identifier)
|
userInfo, err := l.registerUserAndDevice(tx, oldDevice.Identifier, oldDevice.Ip, oldDevice.UserAgent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "创建新用户失败")
|
return errors.Wrap(err, "创建新用户失败")
|
||||||
}
|
}
|
||||||
@ -98,7 +98,6 @@ func (l *DeleteAccountLogic) DeleteAccount() (resp *types.DeleteAccountResponse,
|
|||||||
resp.Message = "账户注销成功"
|
resp.Message = "账户注销成功"
|
||||||
resp.UserId = newUserId
|
resp.UserId = newUserId
|
||||||
resp.Code = 200
|
resp.Code = 200
|
||||||
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +108,7 @@ func generateReferCode() string {
|
|||||||
return hex.EncodeToString(bytes)
|
return hex.EncodeToString(bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *DeleteAccountLogic) registerUserAndDevice(tx *gorm.DB, identifier string) (*user.User, error) {
|
func (l *DeleteAccountLogic) registerUserAndDevice(tx *gorm.DB, identifier, ip, userAgent string) (*user.User, error) {
|
||||||
// 1. 创建新用户
|
// 1. 创建新用户
|
||||||
userInfo := &user.User{
|
userInfo := &user.User{
|
||||||
Salt: "default",
|
Salt: "default",
|
||||||
@ -141,9 +140,9 @@ func (l *DeleteAccountLogic) registerUserAndDevice(tx *gorm.DB, identifier strin
|
|||||||
|
|
||||||
// 4. 插入设备记录
|
// 4. 插入设备记录
|
||||||
deviceInfo := &user.Device{
|
deviceInfo := &user.Device{
|
||||||
Ip: "",
|
Ip: ip,
|
||||||
UserId: userInfo.Id,
|
UserId: userInfo.Id,
|
||||||
UserAgent: "",
|
UserAgent: userAgent,
|
||||||
Identifier: identifier,
|
Identifier: identifier,
|
||||||
Enabled: true,
|
Enabled: true,
|
||||||
Online: false,
|
Online: false,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user