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. 使用 AdminUser 等非 super 角色登录系统;
  4. 登录后观察跳转行为,随后点击返回按钮回到主页面,查看 tab 标签栏状态。

期望的结果是什么?*

  1. 用户退出时,系统需同时完成
  • 彻底销毁当前用户的会话信息(含登录状态、角色权限等);
  • 清除登录页 URL 中的 redirect 参数,使登录页地址恢复为纯净形式(如 http://localhost:9527/login);
  • 清空 tab 标签栏中存储的上一用户标签列表。
  1. 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错误,未引入新的页面异常或功能冲突。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐