package auth import ( "context" "fmt" "github.com/youruser/base/internal/svc" "github.com/youruser/base/internal/types" "github.com/youruser/base/internal/util/jwt" "github.com/youruser/base/model" "github.com/zeromicro/go-zero/core/logx" ) type RefreshTokenLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } // 刷新 Token func NewRefreshTokenLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RefreshTokenLogic { return &RefreshTokenLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *RefreshTokenLogic) RefreshToken(req *types.RefreshTokenRequest) (resp *types.LoginResponse, err error) { // 解析并验证 Token claims, err := jwt.ParseToken(req.Token) if err != nil { return &types.LoginResponse{ Code: 401, Message: "Token无效或已过期", Success: false, }, nil } // 查询用户是否存在 user, err := model.FindOne(l.ctx, l.svcCtx.DB, claims.UserID) if err != nil { if err == model.ErrNotFound { return &types.LoginResponse{ Code: 404, Message: "用户不存在", Success: false, }, nil } return nil, fmt.Errorf("查询用户失败: %v", err) } // 生成新 Token newToken, err := jwt.GenerateToken(user.Id, user.Username, user.Role) if err != nil { return nil, fmt.Errorf("生成Token失败: %v", err) } l.Infof("刷新Token成功,userId=%d", user.Id) return &types.LoginResponse{ Code: 200, Message: "刷新Token成功", Success: true, Token: newToken, }, nil }