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.
 
 
 
 
 
 

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中的安全定义配置

// @securityDefinitions.apikey BearerAuth
// @in header
// @name Authorization
// @description 请输入 "Bearer " + JWT token,例如: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

2. API控制器中的安全配置

// @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:验证配置

运行测试脚本验证配置:

.\test-swagger-auth.ps1

这个脚本会:

  1. 检查后端服务状态
  2. 验证Swagger JSON文档
  3. 检查安全定义配置
  4. 检查API安全配置
  5. 测试Swagger UI页面

使用步骤

1. 启动后端服务

cd backend
go run main.go

2. 访问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按钮能正常显示和使用。