fix gitea workflow path and runner label
Build docker and publish / build (20.15.1) (push) Failing after 7m54s
Build docker and publish / build (20.15.1) (push) Failing after 7m54s
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/perfect-panel/server/internal/config"
|
||||
"github.com/perfect-panel/server/internal/model/user"
|
||||
@@ -146,9 +147,36 @@ func (l *DeleteAccountLogic) DeleteAccountAll() (resp *types.DeleteAccountRespon
|
||||
|
||||
// 获取当前调用设备 ID
|
||||
currentDeviceId, _ := l.ctx.Value(constant.CtxKeyDeviceID).(int64)
|
||||
currentIdentifier, _ := l.ctx.Value(constant.CtxKeyIdentifier).(string)
|
||||
currentIdentifier = strings.TrimSpace(currentIdentifier)
|
||||
|
||||
if currentDeviceId == 0 && currentIdentifier != "" {
|
||||
deviceInfo, deviceErr := l.svcCtx.UserModel.FindOneDeviceByIdentifier(l.ctx, currentIdentifier)
|
||||
switch {
|
||||
case deviceErr == nil:
|
||||
if deviceInfo.UserId == currentUser.Id {
|
||||
currentDeviceId = deviceInfo.Id
|
||||
} else {
|
||||
l.Infow("当前标识符设备归属与用户不匹配",
|
||||
logger.Field("user_id", currentUser.Id),
|
||||
logger.Field("device_id", deviceInfo.Id),
|
||||
logger.Field("identifier", currentIdentifier),
|
||||
)
|
||||
}
|
||||
case errors.Is(deviceErr, gorm.ErrRecordNotFound):
|
||||
l.Infow("未通过标识符找到当前设备", logger.Field("user_id", currentUser.Id), logger.Field("identifier", currentIdentifier))
|
||||
default:
|
||||
l.Errorw("通过标识符查找当前设备失败",
|
||||
logger.Field("user_id", currentUser.Id),
|
||||
logger.Field("identifier", currentIdentifier),
|
||||
logger.Field("error", deviceErr.Error()),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
resp = &types.DeleteAccountResponse{}
|
||||
var newUserId int64
|
||||
var firstMigratedUserId int64
|
||||
|
||||
// 开始数据库事务
|
||||
err = l.svcCtx.UserModel.Transaction(l.ctx, func(tx *gorm.DB) error {
|
||||
@@ -179,6 +207,9 @@ func (l *DeleteAccountLogic) DeleteAccountAll() (resp *types.DeleteAccountRespon
|
||||
l.Errorw("为设备分配新用户主体失败", logger.Field("device_id", dev.Id), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
if firstMigratedUserId == 0 {
|
||||
firstMigratedUserId = newUser.Id
|
||||
}
|
||||
|
||||
// B. 迁移设备记录 (Update user_id)
|
||||
if err := tx.Model(&user.Device{}).Where("id = ?", dev.Id).Update("user_id", newUser.Id).Error; err != nil {
|
||||
@@ -195,7 +226,11 @@ func (l *DeleteAccountLogic) DeleteAccountAll() (resp *types.DeleteAccountRespon
|
||||
}
|
||||
|
||||
// 如果是当前请求的设备,记录其新 UserID 返回给前端
|
||||
if dev.Id == currentDeviceId || dev.Identifier == l.getIdentifierByDeviceID(userDevices, currentDeviceId) {
|
||||
isCurrentRequestDevice := currentDeviceId > 0 && dev.Id == currentDeviceId
|
||||
if !isCurrentRequestDevice && currentIdentifier != "" {
|
||||
isCurrentRequestDevice = dev.Identifier == currentIdentifier
|
||||
}
|
||||
if isCurrentRequestDevice {
|
||||
newUserId = newUser.Id
|
||||
}
|
||||
l.Infow("旧设备已迁移至新匿名账号",
|
||||
@@ -236,6 +271,9 @@ func (l *DeleteAccountLogic) DeleteAccountAll() (resp *types.DeleteAccountRespon
|
||||
|
||||
// 最终清理所有 Session (踢掉所有设备)
|
||||
l.clearAllSessions(currentUser.Id)
|
||||
if newUserId == 0 {
|
||||
newUserId = firstMigratedUserId
|
||||
}
|
||||
|
||||
resp.Success = true
|
||||
resp.Message = "注销成功"
|
||||
|
||||
Reference in New Issue
Block a user