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), "删除用户记录失败")
|
||||
}
|
||||
|
||||
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 {
|
||||
l.Errorw("创建邮箱用户设备记录失败", logger.Field("error", err.Error()), logger.Field("email_user_id", emailUserId))
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "创建邮箱用户设备记录失败")
|
||||
@ -212,14 +220,16 @@ func (l *BindEmailWithVerificationLogic) checkIfPureDeviceUser(ctx context.Conte
|
||||
}
|
||||
|
||||
// 邮箱存在的情况:在 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
|
||||
l.Infow("创建邮箱用户设备记录",
|
||||
logger.Field("email_user_id", emailUserId),
|
||||
logger.Field("device_identifier", deviceIdentifier),
|
||||
logger.Field("online", true),
|
||||
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{
|
||||
UserId: emailUserId,
|
||||
@ -227,6 +237,7 @@ func (l *BindEmailWithVerificationLogic) createDeviceRecordForEmailUser(emailUse
|
||||
Online: false,
|
||||
Enabled: false,
|
||||
UserAgent: userAgent,
|
||||
Ip: ip,
|
||||
})
|
||||
if err != nil {
|
||||
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. 为每个原设备创建新的用户(使用同一事务)
|
||||
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 {
|
||||
return errors.Wrap(err, "创建新用户失败")
|
||||
}
|
||||
@ -98,7 +98,6 @@ func (l *DeleteAccountLogic) DeleteAccount() (resp *types.DeleteAccountResponse,
|
||||
resp.Message = "账户注销成功"
|
||||
resp.UserId = newUserId
|
||||
resp.Code = 200
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
@ -109,7 +108,7 @@ func generateReferCode() string {
|
||||
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. 创建新用户
|
||||
userInfo := &user.User{
|
||||
Salt: "default",
|
||||
@ -141,9 +140,9 @@ func (l *DeleteAccountLogic) registerUserAndDevice(tx *gorm.DB, identifier strin
|
||||
|
||||
// 4. 插入设备记录
|
||||
deviceInfo := &user.Device{
|
||||
Ip: "",
|
||||
Ip: ip,
|
||||
UserId: userInfo.Id,
|
||||
UserAgent: "",
|
||||
UserAgent: userAgent,
|
||||
Identifier: identifier,
|
||||
Enabled: true,
|
||||
Online: false,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user