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