You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
4.2 KiB

# Swagger UI Authorize按钮不显示问题解决方案
## 问题描述
在Swagger UI中,右上角没有显示"Authorize"按钮,无法配置JWT token进行API测试。
## 原因分析
1. **Swagger UI版本问题**:某些版本的Swagger UI可能不显示Authorize按钮
2. **配置方式问题**:gin-swagger的配置可能不完整
3. **浏览器缓存问题**:浏览器可能缓存了旧版本的页面
## 解决方案
### 方案1:使用自定义Swagger UI(推荐)
我已经创建了一个自定义的Swagger UI页面,确保Authorize按钮能正确显示:
1. **访问自定义Swagger UI**
```
http://localhost:8080/swagger-ui
```
2. **这个页面使用了最新版本的Swagger UI (5.9.0)**,确保Authorize按钮正常显示
### 方案2:检查配置
确保以下配置正确:
#### 1. main.go中的安全定义配置
```go
// @securityDefinitions.apikey BearerAuth
// @in header
// @name Authorization
// @description 请输入 "Bearer " + JWT token,例如: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
```
#### 2. API控制器中的安全配置
```go
// @Security BearerAuth
// @Router /auth/roles [post]
func (c *RoleController) CreateRole(ctx *gin.Context) {
// ...
}
```
### 方案3:浏览器操作
1. **清除浏览器缓存**
-`Ctrl+Shift+Delete`
- 选择"缓存的图片和文件"
- 点击"清除数据"
2. **强制刷新页面**
-`Ctrl+F5` 强制刷新
- 或者按 `Ctrl+Shift+R`
3. **检查浏览器控制台**
-`F12` 打开开发者工具
- 查看Console标签页是否有错误信息
- 查看Network标签页是否有请求失败
### 方案4:验证配置
运行测试脚本验证配置:
```powershell
.\test-swagger-auth.ps1
```
这个脚本会:
1. 检查后端服务状态
2. 验证Swagger JSON文档
3. 检查安全定义配置
4. 检查API安全配置
5. 测试Swagger UI页面
## 使用步骤
### 1. 启动后端服务
```bash
cd backend
go run main.go
```
### 2. 访问Swagger UI
- **默认UI**:http://localhost:8080/swagger/index.html
- **自定义UI**:http://localhost:8080/swagger-ui (推荐)
### 3. 配置身份验证
1. 点击右上角的 **"Authorize"** 按钮
2. 在输入框中输入:`Bearer <your-jwt-token>`
3. 点击 **"Authorize"** 按钮
### 4. 获取JWT Token
1. 先调用 `/api/auth/captcha` 获取验证码
2. 再调用 `/api/auth/login` 进行登录
3. 复制返回的 `access_token`
## 故障排除
### 如果Authorize按钮仍然不显示:
1. **检查Swagger JSON文档**
```
http://localhost:8080/swagger/doc.json
```
确保包含 `securityDefinitions` 部分
2. **检查API配置**
确保需要认证的API包含 `security` 配置
3. **尝试不同的浏览器**
- Chrome
- Firefox
- Edge
4. **检查网络连接**
确保能正常访问Swagger UI页面
### 常见错误及解决方案:
1. **"Failed to load resource"**:
- 检查后端服务是否正常运行
- 检查端口8080是否被占用
2. **"CORS error"**:
- 确保CORS中间件正确配置
- 检查请求来源
3. **"404 Not Found"**:
- 确保Swagger路由正确配置
- 检查文件路径
## 验证成功标志
当配置正确时,你应该能看到:
1. ✅ Swagger UI页面正常加载
2. ✅ 右上角显示 **"Authorize"** 按钮
3. ✅ 点击Authorize按钮能打开认证对话框
4. ✅ 需要认证的API显示锁定图标 🔒
5. ✅ 配置token后能正常调用需要认证的API
## 测试API流程
1. **获取验证码**
```
GET /api/auth/captcha
```
2. **用户登录**
```
POST /api/auth/login
{
"username": "admin",
"password": "admin123",
"captcha": "验证码",
"captcha_id": "验证码ID"
}
```
3. **配置Authorize**
- 点击Authorize按钮
- 输入:`Bearer <access_token>`
- 点击Authorize
4. **测试需要认证的API**
```
GET /api/auth/roles
POST /api/auth/roles
PUT /api/auth/roles/{id}
DELETE /api/auth/roles/{id}
```
## 总结
如果默认的Swagger UI不显示Authorize按钮,请使用自定义的Swagger UI页面:
```
http://localhost:8080/swagger-ui
```
这个页面使用了最新版本的Swagger UI,确保Authorize按钮能正常显示和使用。