GitHub Bug反馈与修复全流程指南
GitHub Bug反馈与修复全流程指南
本文档包含从发现Bug、提交Issue,到代码修复、提交PR的完整操作步骤,以“角色切换登录权限异常”问题为例,提供可复用的模板和操作规范。
一、提交Bug反馈(创建Issue)
在目标仓库的GitHub页面,点击「Issues」→「New issue」,选择Bug模板(若无则选「Open a blank issue」),按以下结构填写。
Add a title*
[Bug]: 不同角色在同一设备登录后,因残留 redirect 参数及 tab 标签数据导致权限问题
软件版本*
当前代码的版本 如:v2.1.2
重现步骤*
- 以
super角色登录系统,访问特定页面http://localhost:9527/function/super-page; - 执行退出登录操作,观察到登录页 URL 保留跳转参
redirect=/function/super-page(即登录页地址为http://localhost:9527/login?redirect=/function/super-page); - 使用
Admin或User等非super角色登录系统; - 登录后观察跳转行为,随后点击返回按钮回到主页面,查看 tab 标签栏状态。
期望的结果是什么?*
- 用户退出时,系统需同时完成:
- 彻底销毁当前用户的会话信息(含登录状态、角色权限等);
- 清除登录页 URL 中的
redirect参数,使登录页地址恢复为纯净形式(如http://localhost:9527/login); - 清空 tab 标签栏中存储的上一用户标签列表。
- 非
super角色登录后:
- 不继承残留的
redirect参数,不强制跳转至/function/super-page; - tab 标签栏为全新无残留状态;
- 自动引导至对应角色的默认首页或合法页面,无权限错误。
实际的结果是什么?*
- 退出登录后,登录页 URL 仍保留
redirect=/function/super-page参数; - 非
super角色登录后,被强制跳转至仅super可访问的/function/super-page,触发 403 错误; - 点击返回按钮回到主页面后,tab 标签栏残留上一用户(
super角色)打开的标签列表,当前用户可见但部分页面因权限不足无法访问。
二、修复Bug并提交代码(开发流程)
步骤1:Fork原仓库
- 进入目标仓库(如
soybean-admin-react),点击右上角「Fork」按钮。 - 在个人GitHub账号下生成仓库副本,获得该副本的完全修改权限。
步骤2:克隆副本到本地
- 打开个人账号下的Fork仓库,复制HTTPS或SSH格式的克隆地址。
- 在本地终端执行命令:
git clone 你的克隆地址,将仓库拉取到本地电脑。
步骤3:本地开发与修改
- 进入本地仓库目录,基于原仓库主分支(如
main/master)新建分支,避免直接修改主分支,命令示例:git checkout -b fix/clear-redirect-param-80(后缀加Issue号便于关联)。 - 定位代码问题,修改核心逻辑(如在退出登录函数中添加
redirect参数清除、tab数据清空逻辑)。
步骤4:提交代码到个人Fork仓库
- 执行
git add .,添加所有修改过的文件。 - 执行
git commit -m "fix(auth): 退出时清除redirect参数与tab数据,解决角色切换403问题 (#80)", commit信息需关联Issue号并说明目的。 - 执行
git push origin 你的分支名,将本地代码推送到个人Fork仓库的对应分支。
步骤5:向原仓库提交PR(Pull Request)
- 进入个人Fork仓库,页面会自动提示「Compare & pull request」,点击进入;若无则手动点击「Pull requests」→「New pull request」。
- 选择代码来源与目标:「head repository」选个人Fork仓库,「compare」选自己修改的分支;「base repository」选原仓库,「base」选主分支(如
main)。 - 填写PR标题和描述(参考下文模板),确认信息无误后点击「Create pull request」。
三、PR描述填写模板(以修复#80为例)
PR标题
Fixes #80 修复不同角色切换登录的权限异常问题
1. 修复的问题
同一设备切换角色登录时,因退出登录未清理两类数据导致权限异常:
- 登录页URL残留
redirect=/function/super-page参数,非super角色登录后被强制跳转至无权限页面,触发403错误。 - tab标签栏残留上一用户的页面列表,当前用户可见但部分页面无权限访问。
2. 核心修改逻辑
围绕“退出登录时彻底清除残留数据”展开,涉及4个文件的修改,确保“退出即重置”:
-
auth.ts(核心退出逻辑)
新增toLogout函数,整合完整退出流程:调用clearAuthStorage()清除本地认证信息、dispatch(resetAuthAction())重置全局权限状态、clearTabs()清空tab数据、resetRoutes()重置路由配置,最终通过navigate('/login', { replace: true })跳转至无参数的纯净登录页。 -
tabHooks.ts(tab数据清理工具)
新增useClearTabs自定义钩子,提供clearTabs方法:调用localStg.remove('globalTabs')删除本地存储的tab数据,通过dispatch(clearTabData())清空状态管理中的tab数据。 -
tabStore.ts(tab状态管理)
新增clearTabDataaction,将tab状态重置为initialState(初始空状态),配合tabHooks.ts完成全局tab数据清理。 -
UserAvatar.tsx(退出入口)
修改退出触发逻辑:引入useLogout获取toLogout方法,在退出确认的onOk回调中,用toLogout()替代原navigate('/login-out'),确保执行完整清理流程。
3. 测试验证
已在本地环境完成多轮测试,验证结果如下:
super角色登录并访问/function/super-page后退出,登录页URL无redirect参数。Admin/User角色登录时,不跳转至无权限页面,自动进入对应角色的默认首页。- 登录后tab标签栏无任何残留数据,仅显示当前角色可访问的初始标签。
- 全流程无403错误,未引入新的页面异常或功能冲突。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)