3.1 KiB
3.1 KiB
排查计划:解决后台登录 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 自增顺序不符合预期,或者数据未完全写入,可能导致关联丢失。
执行步骤:
- 检查数据库数据:
- 确认
lq用户的role_id是否为 1。 - 确认
roles表中 ID 为 1 的是 admin。 - 最关键:检查
role_permissions表中,role_id = 1是否有对应的权限记录。我怀疑这里是空的或者不完整。
- 确认
- 修复数据:
- 如果发现权限关联缺失,我将重新执行权限关联的 SQL 语句,确保
admin角色拥有所有权限。
- 如果发现权限关联缺失,我将重新执行权限关联的 SQL 语句,确保
- 验证 Token 生成:
- 检查登录接口生成的 JWT Token 是否正确包含
role_idclaim。
- 检查登录接口生成的 JWT Token 是否正确包含
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接口可用,并且前端能正确展示结果。
执行步骤:
- 确认后端运行状态:确保后端服务正在运行且没有报错。
- 验证 API 接口:
- 检查
main.go中是否注册了/api/run路由。 - 检查
handlers_runner.go是否正确处理请求。
- 检查
- 前端调试:
- 确认
CodePreview.vue中的fetch请求地址是否正确(目前写死为http://localhost:8081/api/run,如果端口不同则会失败)。需要确认后端端口配置。
- 确认
总结计划
我将分两步走:
- 数据库修复:运行 SQL 脚本修复
role_permissions数据,解决 403 问题。 - 代码运行验证:确认后端端口,确保前端 API 调用地址正确。
无需修改代码(除非端口不对),主要是数据修复和验证。