Skip to content

fix(OIDC): 修复 OIDC 登录回调后登录状态未持久化的问题 - #258

Merged
kklldog merged 1 commit into
dotnetcore:masterfrom
pengqian089:fix/oidc-login-token-persist
Sep 18, 2026
Merged

kklldog merged 1 commit into
dotnetcore:masterfrom
pengqian089:fix/oidc-login-token-persist

Conversation

@pengqian089

Copy link
Copy Markdown
Contributor

Fixes #257

  • 使用 connect 注入 dispatch,将 OIDC 回调组件接入 umi model
  • OIDC 登录成功后 dispatch login/changeLoginStatus,同步更新全局登录状态
  • 补充 dispatch 到 useEffect 依赖数组,避免闭包引用过期
  • 导出改为 connect 包裹的组件

- 使用 connect 注入 dispatch,将 OIDC 回调组件接入 umi model
- OIDC 登录成功后 dispatch `login/changeLoginStatus`,同步更新全局登录状态
- 补充 dispatch 到 useEffect 依赖数组,避免闭包引用过期
- 导出改为 connect 包裹的组件
@kklldog

kklldog commented Sep 18, 2026

Copy link
Copy Markdown
Collaborator

#258 的修复方案本身没有明显问题,可以正确修复 #257。

关键点是它通过 dispatch({ type: 'login/changeLoginStatus', payload: response }) 走现有登录 reducer。该 reducer会同步执行 setToken、setAuthority、setFunctions 和 setCategories,之后才跳转到 /,因此 Home/current 发起时已经能携带 token。相比旧代码直接调用 reducer,这种通过 DVA/Umi dispatch 的方式也更规范。dispatch 加入 useEffect 依赖以及用 connect 注入都没有问题,PR 的前后端构建检查也已通过。

唯一不足是没有增加回归测试,目前只能防住编译错误,不能防止以后再次遗漏登录态持久化。可以补一个 OIDC 回调组件测试,模拟成功响应后断言 localStorage.token 已写入并跳转;但这不构成当前 PR 的合并阻塞项。

@kklldog
kklldog merged commit 0ee2f7a into dotnetcore:master Sep 18, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] 1.13.1+ OIDC 登录回调未保存 token,登录后必定 401(前端回归)

2 participants