package com.xuekairui.user.dto; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.Builder; import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; /** * 登录响应 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class LoginResponse { /** 用户ID(String 序列化,避免前端 JS 大数精度丢失) */ @JsonSerialize(using = ToStringSerializer.class) private Long userId; /** 访问令牌 */ private String accessToken; /** 刷新令牌 */ private String refreshToken; /** 令牌过期时间(秒) */ private Long expiresIn; /** 用户信息 */ private UserInfoResponse userInfo; /** 是否需要绑定手机号 */ private Boolean needBindPhone; /** 临时令牌(用于绑定手机号) */ private String tempToken; /** 是否为新用户(首次注册) */ private Boolean newUser; /** 用户角色:USER/ADMIN/SUPER_ADMIN */ private String role; /** 是否踢出了旧设备会话(是否有旧会话被强制终止) */ private Boolean kickedPreviousSession; /** 被踢出的旧设备信息(如 "Windows Chrome / 192.168.1.1") */ private String kickedDeviceInfo; }