51 lines
3.1 KiB
Markdown
51 lines
3.1 KiB
Markdown
# 排查计划:解决后台登录 403 错误与代码预览功能
|
||
|
||
## 1. 解决后台登录 lq 用户报错 403 的问题
|
||
|
||
用户 `lq` 登录后台遇到 403 Forbidden 错误,通常意味着认证通过(Token 有效),但**授权失败**(权限不足)。
|
||
|
||
**原因分析**:
|
||
- 我之前在 `middleware/auth.go` 中实现了 `PermissionMiddleware`,它严格检查 `role_permissions` 表中的关联。
|
||
- 我之前提供的 SQL 语句(`nl_blog.sql`)虽然包含了 `INSERT INTO role_permissions` 语句,但如果数据库没有正确执行这些插入操作,或者 `lq` 用户的 `role_id` 没有正确关联到 `admin` 角色,就会导致权限为空,从而触发 403。
|
||
- 从 `nl_blog.sql` 来看:
|
||
- `lq` 用户的 `role_id` 是 `1` (`admin`)。
|
||
- `roles` 表中 `admin` 的 ID 是 `1`。
|
||
- `permissions` 表被清空重建了。
|
||
- 关键点:`role_permissions` 表的插入语句依赖 `SELECT id FROM permissions`。如果 `permissions` 表的 ID 自增顺序不符合预期,或者数据未完全写入,可能导致关联丢失。
|
||
|
||
**执行步骤**:
|
||
1. **检查数据库数据**:
|
||
- 确认 `lq` 用户的 `role_id` 是否为 1。
|
||
- 确认 `roles` 表中 ID 为 1 的是 admin。
|
||
- **最关键**:检查 `role_permissions` 表中,`role_id = 1` 是否有对应的权限记录。我怀疑这里是空的或者不完整。
|
||
2. **修复数据**:
|
||
- 如果发现权限关联缺失,我将重新执行权限关联的 SQL 语句,确保 `admin` 角色拥有所有权限。
|
||
3. **验证 Token 生成**:
|
||
- 检查登录接口生成的 JWT Token 是否正确包含 `role_id` claim。
|
||
|
||
## 2. 解决代码预览功能未实现的问题
|
||
|
||
用户反馈代码预览功能(前端 CodePreview 组件)未实现或报错。
|
||
|
||
**原因分析**:
|
||
- 前端 `CodePreview.vue` 之前是纯前端模拟,现在我已将其连接到后端 `/api/run` 接口。
|
||
- 如果后端接口未正确响应(例如跨域、404、或内部错误),前端会报错。
|
||
- 用户提到的 "VM321:25 Uncaught SyntaxError: Failed to execute 'write' on 'Document': Cannot use import statement outside a module" 错误,我已经通过在上一步修改 `CodePreview.vue`(添加 `<script type="module">`)解决了。
|
||
- 现在的重点是确保后端 `/api/run` 接口可用,并且前端能正确展示结果。
|
||
|
||
**执行步骤**:
|
||
1. **确认后端运行状态**:确保后端服务正在运行且没有报错。
|
||
2. **验证 API 接口**:
|
||
- 检查 `main.go` 中是否注册了 `/api/run` 路由。
|
||
- 检查 `handlers_runner.go` 是否正确处理请求。
|
||
3. **前端调试**:
|
||
- 确认 `CodePreview.vue` 中的 `fetch` 请求地址是否正确(目前写死为 `http://localhost:8081/api/run`,如果端口不同则会失败)。需要确认后端端口配置。
|
||
|
||
## 总结计划
|
||
|
||
我将分两步走:
|
||
1. **数据库修复**:运行 SQL 脚本修复 `role_permissions` 数据,解决 403 问题。
|
||
2. **代码运行验证**:确认后端端口,确保前端 API 调用地址正确。
|
||
|
||
**无需修改代码**(除非端口不对),主要是**数据修复**和**验证**。
|