在平台 C 端(求职者端),用户可以通过 APP、小程序、PC(Web) 端进行登录,支持多种方式,如:
- 账号密码登录
- 短信验证码登录
- 第三方登录(微信、QQ、GitHub、Google、Apple ID)
- 单点登录(SSO)
- Token 机制
以下是详细的数据库表结构设计方案,包括 用户管理、登录管理、第三方授权、短信验证码、Token管理、设备信息、黑名单管理 等核心表。
1. 用户信息表(user
)
存储 C 端用户的基本信息,包括求职者的基本资料。
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 用户ID |
username | VARCHAR(50) | UNIQUE, NULL | 用户名(可以为空,第三方注册可能没有) |
password | VARCHAR(255) | NULL | 加密存储的密码(第三方用户可为空) |
salt | VARCHAR(64) | NULL | 密码加盐 |
VARCHAR(100) | UNIQUE, NULL | 邮箱地址(用于邮箱注册、通知) | |
phone | VARCHAR(20) | UNIQUE, NULL | 手机号(用于手机号注册、找回密码) |
avatar | VARCHAR(255) | NULL | 头像 URL |
gender | ENUM('male', 'female', 'unknown') | DEFAULT 'unknown' | 性别 |
birthday | DATE | NULL | 生日 |
resume_url | VARCHAR(255) | NULL | 简历存储路径 |
work_status | ENUM('employed', 'job_seeking', 'freelancer') | DEFAULT 'job_seeking' | 求职状态 |
register_source | ENUM('app', 'mini_program', 'pc', 'web') | NOT NULL | 注册来源 |
status | TINYINT | DEFAULT 1 | 账户状态(1=正常,0=禁用) |
created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
2. 用户登录日志表(user_login_log
)
记录 C 端用户的每次登录信息,以便进行审计、安全追踪。
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 记录ID |
user_id | BIGINT | NOT NULL | 关联 user.id |
login_time | DATETIME | DEFAULT CURRENT_TIMESTAMP | 登录时间 |
login_ip | VARCHAR(50) | NOT NULL | 登录 IP 地址 |
device | VARCHAR(100) | NULL | 登录设备(如iPhone 14, Windows 10) |
os | VARCHAR(50) | NULL | 操作系统(如 iOS, Android, Windows) |
browser | VARCHAR(50) | NULL | 浏览器信息(如 Chrome, Safari) |
login_method | ENUM('password', 'sms', 'wechat', 'qq', 'github', 'google', 'apple', 'sso') | NOT NULL | 登录方式 |
success | BOOLEAN | DEFAULT TRUE | 是否成功 |
fail_reason | VARCHAR(255) | NULL | 登录失败原因 |
3. 用户第三方登录表(user_oauth
)
存储用户的 微信、QQ、GitHub、Google、Apple ID 账号信息。
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 记录ID |
user_id | BIGINT | NOT NULL | 关联 user.id |
oauth_type | ENUM('wechat', 'qq', 'github', 'google', 'facebook', 'apple', 'linkedin') | NOT NULL | 第三方平台 |
oauth_id | VARCHAR(255) | NOT NULL | 第三方用户唯一标识 |
union_id | VARCHAR(255) | NULL | 微信/QQ的UnionID(用于多应用绑定) |
access_token | VARCHAR(255) | NULL | 访问令牌 |
refresh_token | VARCHAR(255) | NULL | 刷新令牌 |
expires_in | INT | NULL | 令牌过期时间(秒) |
created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 绑定时间 |
4. 短信验证码表(sms_verification
)
用于 短信验证码登录、找回密码 等场景。
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 记录ID |
phone | VARCHAR(20) | NOT NULL | 发送验证码的手机号 |
code | VARCHAR(6) | NOT NULL | 短信验证码 |
type | ENUM('login', 'register', 'reset_password', 'verify') | NOT NULL | 验证码用途 |
expired_at | DATETIME | NOT NULL | 过期时间 |
used | BOOLEAN | DEFAULT FALSE | 是否已使用 |
created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
5. 用户 Token 表(user_token
)
存储用户登录后的 JWT Token、刷新 Token。
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 记录ID |
user_id | BIGINT | NOT NULL | 关联 user.id |
token | VARCHAR(512) | NOT NULL | 访问 Token(如 JWT) |
refresh_token | VARCHAR(512) | NULL | 刷新 Token |
device | VARCHAR(100) | NULL | 登录设备信息 |
os | VARCHAR(50) | NULL | 操作系统 |
expired_at | DATETIME | NOT NULL | 过期时间 |
created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 生成时间 |
6. 用户设备信息表(user_device
)
存储用户设备信息,支持 多端登录。
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 设备记录ID |
user_id | BIGINT | NOT NULL | 关联 user.id |
device_id | VARCHAR(255) | NOT NULL | 设备唯一标识(如 UUID) |
device_type | ENUM('mobile', 'tablet', 'pc', 'mini_program') | NOT NULL | 设备类型 |
os | VARCHAR(50) | NOT NULL | 操作系统 |
app_version | VARCHAR(50) | NULL | APP 版本号 |
last_login_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 最后登录时间 |
7. 用户黑名单表(user_blacklist
)
存储被封禁的用户。
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 记录ID |
user_id | BIGINT | NOT NULL | 关联 user.id |
reason | VARCHAR(255) | NOT NULL | 封禁原因 |
banned_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 封禁时间 |
expire_at | DATETIME | NULL | 封禁到期时间 |
总结
这套设计方案确保了 安全性、可扩展性、多端兼容性,满足招聘平台 C 端用户的登录需求。