新增登录注册
This commit is contained in:
@@ -1,3 +1,77 @@
|
||||
# 应用服务 WEB 访问端口
|
||||
server.port=8080
|
||||
|
||||
# 数据源配置
|
||||
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
|
||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
spring.datasource.url=jdbc:mysql://120.24.204.180:3306/app?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
spring.datasource.username=app
|
||||
spring.datasource.password=AB636NGhhH2cC5A5
|
||||
|
||||
# Druid 连接池配置
|
||||
spring.datasource.druid.initial-size=5
|
||||
spring.datasource.druid.min-idle=5
|
||||
spring.datasource.druid.max-active=20
|
||||
spring.datasource.druid.max-wait=60000
|
||||
spring.datasource.druid.test-while-idle=true
|
||||
spring.datasource.druid.test-on-borrow=false
|
||||
spring.datasource.druid.test-on-return=false
|
||||
spring.datasource.druid.time-between-eviction-runs-millis=60000
|
||||
spring.datasource.druid.min-evictable-idle-time-millis=300000
|
||||
spring.datasource.druid.validation-query=SELECT 1
|
||||
spring.datasource.druid.pool-prepared-statements=true
|
||||
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
|
||||
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
|
||||
spring.datasource.druid.filters=stat,wall
|
||||
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
|
||||
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
|
||||
|
||||
# MyBatis-Plus 配置
|
||||
mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
|
||||
mybatis-plus.type-aliases-package=com.corewing.app.entity
|
||||
mybatis-plus.configuration.map-underscore-to-camel-case=true
|
||||
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
|
||||
mybatis-plus.global-config.db-config.id-type=AUTO
|
||||
mybatis-plus.global-config.db-config.table-prefix=
|
||||
|
||||
# Redis 配置
|
||||
spring.redis.host=localhost
|
||||
spring.redis.port=6379
|
||||
spring.redis.password=
|
||||
spring.redis.database=0
|
||||
spring.redis.timeout=3000
|
||||
spring.redis.lettuce.pool.max-active=8
|
||||
spring.redis.lettuce.pool.max-idle=8
|
||||
spring.redis.lettuce.pool.min-idle=0
|
||||
spring.redis.lettuce.pool.max-wait=-1ms
|
||||
|
||||
# Sa-Token 配置
|
||||
sa-token.token-name=Authorization
|
||||
sa-token.timeout=2592000
|
||||
sa-token.active-timeout=-1
|
||||
sa-token.is-concurrent=true
|
||||
sa-token.is-share=true
|
||||
sa-token.token-style=uuid
|
||||
sa-token.is-log=false
|
||||
|
||||
# 短信宝配置
|
||||
# 请前往 https://www.smsbao.com/ 注册账号并获取用户名和密码
|
||||
smsbao.username=your_username
|
||||
smsbao.password=your_password
|
||||
|
||||
# 邮件配置
|
||||
# SMTP 服务器地址
|
||||
spring.mail.host=smtp.chengmail.cn
|
||||
# SMTP 服务器端口
|
||||
spring.mail.port=465
|
||||
# 发件人邮箱
|
||||
spring.mail.username=dev@corewing.com
|
||||
# 邮箱授权码(不是邮箱密码!需要在邮箱设置中开启 SMTP 服务并获取授权码)
|
||||
spring.mail.password=HRTmmNrBRjSxfwAk
|
||||
# 编码格式
|
||||
spring.mail.default-encoding=UTF-8
|
||||
# 其他配置
|
||||
spring.mail.properties.mail.smtp.auth=true
|
||||
spring.mail.properties.mail.smtp.starttls.enable=true
|
||||
spring.mail.properties.mail.smtp.starttls.required=true
|
||||
spring.mail.properties.mail.smtp.ssl.enable=false
|
||||
|
||||
26
src/main/resources/db/user.sql
Normal file
26
src/main/resources/db/user.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
-- 用户表
|
||||
DROP TABLE IF EXISTS `app_user`;
|
||||
|
||||
CREATE TABLE `app_user` (
|
||||
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
|
||||
`username` VARCHAR(50) NOT NULL COMMENT '用户名',
|
||||
`password` VARCHAR(100) NOT NULL COMMENT '密码',
|
||||
`email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
|
||||
`telephone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
|
||||
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像URL',
|
||||
`login_ip` VARCHAR(50) DEFAULT NULL COMMENT '最后登录IP',
|
||||
`status` TINYINT(1) DEFAULT 1 COMMENT '状态:0-禁用 1-启用',
|
||||
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_username` (`username`),
|
||||
UNIQUE KEY `uk_email` (`email`),
|
||||
UNIQUE KEY `uk_telephone` (`telephone`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用用户表';
|
||||
|
||||
-- 插入测试用户(密码为:123456,实际使用时应该加密)
|
||||
INSERT INTO `app_user` (`username`, `password`, `email`, `telephone`, `avatar`, `status`)
|
||||
VALUES
|
||||
('admin', '123456', 'admin@corewing.com', '13800138000', NULL, 1),
|
||||
('test', '123456', 'test@corewing.com', '13800138001', NULL, 1);
|
||||
356
src/main/resources/docs/API接口说明.md
Normal file
356
src/main/resources/docs/API接口说明.md
Normal file
@@ -0,0 +1,356 @@
|
||||
# API 接口说明
|
||||
|
||||
## 用户相关接
|
||||
|
||||
### 1. 发送验证码
|
||||
|
||||
**接口地址:** `POST /user/sendCode`
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{
|
||||
"account": "13800138000", // 手机号或邮箱
|
||||
"type": "register" // 验证码类型: register-注册, login-登录, reset-重置密码
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "验证码发送成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
**说明:**
|
||||
- 手机号格式: 1开头的11位数字
|
||||
- 邮箱格式: 标准邮箱格式
|
||||
- 验证码有效期: 5分钟
|
||||
- 验证码长度: 6位数字
|
||||
|
||||
---
|
||||
|
||||
### 2. 用户注册
|
||||
|
||||
**接口地址:** `POST /user/register`
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{
|
||||
"username": "testuser", // 用户名(必填)
|
||||
"password": "123456", // 密码(必填)
|
||||
"email": "test@example.com", // 邮箱(邮箱和手机号至少填一个)
|
||||
"telephone": "13800138000", // 手机号(邮箱和手机号至少填一个)
|
||||
"code": "123456", // 验证码(必填)
|
||||
"avatar": "http://..." // 头像URL(可选)
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "注册成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
**说明:**
|
||||
- 用户名不能重复
|
||||
- 邮箱和手机号至少填写一个
|
||||
- 邮箱和手机号不能重复
|
||||
- 需要先调用发送验证码接口
|
||||
- 密码会自动进行 MD5 加密
|
||||
|
||||
---
|
||||
|
||||
### 3. 用户登录
|
||||
|
||||
**接口地址:** `POST /user/login`
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{
|
||||
"account": "testuser", // 账号(用户名/邮箱/手机号)
|
||||
"password": "123456" // 密码
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "登录成功",
|
||||
"data": {
|
||||
"token": "uuid-token-string",
|
||||
"userId": 1,
|
||||
"username": "testuser"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**说明:**
|
||||
- account 支持用户名、邮箱、手机号三种方式登录
|
||||
- 登录成功后返回 token,后续请求需要在 Header 中携带: `Authorization: token值`
|
||||
|
||||
---
|
||||
|
||||
### 4. 用户登出
|
||||
|
||||
**接口地址:** `POST /user/logout`
|
||||
|
||||
**请求头:**
|
||||
```
|
||||
Authorization: your-token
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "登出成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 获取当前用户信息
|
||||
|
||||
**接口地址:** `GET /user/info`
|
||||
|
||||
**请求头:**
|
||||
```
|
||||
Authorization: your-token
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"password": null,
|
||||
"email": "test@example.com",
|
||||
"telephone": "13800138000",
|
||||
"avatar": null,
|
||||
"loginIp": "127.0.0.1",
|
||||
"status": 1,
|
||||
"createTime": "2025-01-01T12:00:00",
|
||||
"updateTime": "2025-01-01T12:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. 根据ID查询用户
|
||||
|
||||
**接口地址:** `GET /user/{id}`
|
||||
|
||||
**请求头:**
|
||||
```
|
||||
Authorization: your-token
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"password": null,
|
||||
"email": "test@example.com",
|
||||
"telephone": "13800138000",
|
||||
"avatar": null,
|
||||
"loginIp": "127.0.0.1",
|
||||
"status": 1,
|
||||
"createTime": "2025-01-01T12:00:00",
|
||||
"updateTime": "2025-01-01T12:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. 更新用户信息
|
||||
|
||||
**接口地址:** `PUT /user`
|
||||
|
||||
**请求头:**
|
||||
```
|
||||
Authorization: your-token
|
||||
```
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{
|
||||
"id": 1,
|
||||
"username": "newusername",
|
||||
"email": "newemail@example.com",
|
||||
"telephone": "13900139000",
|
||||
"avatar": "http://..."
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "更新成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
**说明:**
|
||||
- 不能通过此接口修改密码
|
||||
- 需要修改密码请使用专门的修改密码接口
|
||||
|
||||
---
|
||||
|
||||
### 8. 修改密码
|
||||
|
||||
**接口地址:** `PUT /user/password`
|
||||
|
||||
**请求头:**
|
||||
```
|
||||
Authorization: your-token
|
||||
```
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{
|
||||
"oldPassword": "123456",
|
||||
"newPassword": "654321"
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "密码修改成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 配置说明
|
||||
|
||||
### 短信宝配置
|
||||
|
||||
在 `application.properties` 中配置短信宝账号信息:
|
||||
|
||||
```properties
|
||||
# 短信宝配置
|
||||
# 请前往 https://www.smsbao.com/ 注册账号并获取用户名和密码
|
||||
smsbao.username=your_username
|
||||
smsbao.password=your_password
|
||||
```
|
||||
|
||||
**注册短信宝账号:**
|
||||
1. 访问 https://www.smsbao.com/
|
||||
2. 注册账号并充值
|
||||
3. 获取用户名和密码(注意:密码是 MD5 加密后的值)
|
||||
4. 配置到 application.properties 中
|
||||
|
||||
---
|
||||
|
||||
### 邮件配置
|
||||
|
||||
在 `application.properties` 中配置邮箱信息:
|
||||
|
||||
```properties
|
||||
# 邮件配置(以 QQ 邮箱为例)
|
||||
spring.mail.host=smtp.qq.com
|
||||
spring.mail.port=587
|
||||
spring.mail.username=your_email@qq.com
|
||||
spring.mail.password=your_authorization_code
|
||||
spring.mail.default-encoding=UTF-8
|
||||
spring.mail.properties.mail.smtp.auth=true
|
||||
spring.mail.properties.mail.smtp.starttls.enable=true
|
||||
spring.mail.properties.mail.smtp.starttls.required=true
|
||||
```
|
||||
|
||||
**配置 QQ 邮箱:**
|
||||
1. 登录 QQ 邮箱网页版
|
||||
2. 进入【设置】->【账户】
|
||||
3. 找到【POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务】
|
||||
4. 开启 SMTP 服务
|
||||
5. 生成授权码(注意:不是 QQ 密码!)
|
||||
6. 将邮箱地址和授权码配置到 application.properties 中
|
||||
|
||||
**其他邮箱配置:**
|
||||
- **163 邮箱**: `smtp.163.com`,端口 `465` 或 `25`
|
||||
- **Gmail**: `smtp.gmail.com`,端口 `587`
|
||||
- **企业邮箱**: 联系管理员获取 SMTP 服务器地址
|
||||
|
||||
---
|
||||
|
||||
## 数据库说明
|
||||
|
||||
### 用户表结构
|
||||
|
||||
```sql
|
||||
CREATE TABLE `app_user` (
|
||||
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
|
||||
`username` VARCHAR(50) NOT NULL COMMENT '用户名',
|
||||
`password` VARCHAR(100) NOT NULL COMMENT '密码',
|
||||
`email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
|
||||
`telephone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
|
||||
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像URL',
|
||||
`login_ip` VARCHAR(50) DEFAULT NULL COMMENT '最后登录IP',
|
||||
`status` TINYINT(1) DEFAULT 1 COMMENT '状态:0-禁用 1-启用',
|
||||
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_username` (`username`),
|
||||
UNIQUE KEY `uk_email` (`email`),
|
||||
UNIQUE KEY `uk_telephone` (`telephone`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用用户表';
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 错误码说明
|
||||
|
||||
| 错误码 | 说明 |
|
||||
|--------|------|
|
||||
| 200 | 成功 |
|
||||
| 500 | 失败 |
|
||||
|
||||
---
|
||||
|
||||
## 开发说明
|
||||
|
||||
### 验证码存储
|
||||
|
||||
- 验证码存储在 Redis 中
|
||||
- Key 格式: `verify_code:{type}:{account}`
|
||||
- 有效期: 5分钟
|
||||
- 验证成功后自动删除
|
||||
|
||||
### 密码加密
|
||||
|
||||
- 使用 MD5 加密
|
||||
- 前端传输明文密码,后端自动加密存储
|
||||
|
||||
### 登录认证
|
||||
|
||||
- 使用 Sa-Token 进行身份认证
|
||||
- Token 有效期: 30天
|
||||
- 除登录、注册、发送验证码接口外,其他接口都需要认证
|
||||
|
||||
### 验证码发送
|
||||
|
||||
- **手机验证码**: 通过短信宝自动发送短信
|
||||
- **邮件验证码**: 通过 Spring Mail 自动发送 HTML 格式的精美邮件
|
||||
- 验证码为 6 位随机数字
|
||||
- 邮件模板包含品牌样式,提升用户体验
|
||||
Reference in New Issue
Block a user