fix: 自动恢复失效令牌并保留身份入口

This commit is contained in:
NathanAlex7
2026-09-15 11:24:52 +08:00
parent 5f49f94ca4
commit e44716b3ec
5 changed files with 32 additions and 5 deletions
+9 -2
View File
@@ -24,7 +24,14 @@ export default function AgentNav({active,project,identity:provided}:{active:stri
useEffect(()=>{
setRoleHint(sessionStorage.getItem("xingbang-demo-role")||"");
if(provided)return;
fetch("/api/risk-agent/access/context",{headers:identityHeaders()}).then(async r=>r.ok?setLoaded(await r.json()):null).catch(()=>null);
fetch("/api/risk-agent/access/context",{headers:identityHeaders()}).then(async response=>{
if(response.ok){setLoaded(await response.json());return;}
if(response.status===401&&sessionStorage.getItem("xingbang-access-token")&&!sessionStorage.getItem("xingbang-demo-role")){
sessionStorage.removeItem("xingbang-access-token");
sessionStorage.setItem("xingbang-demo-role","manager");
location.reload();
}
}).catch(()=>null);
},[provided]);
const identity=provided||loaded;
const role=identity?.role||roleHint;
@@ -42,6 +49,6 @@ export default function AgentNav({active,project,identity:provided}:{active:stri
{canConfigure&&<a href="/data-access" className={active==="risk"?"selected":""}><Settings2 size={16}/>配置治理</a>}
<span className="xb-nav-spacer"/>
{project&&<span className="xb-project-context">项目 · {project}</span>}
{identity?<IdentitySelector identity={identity}/>:<span className="xb-identity"><i/><span>当前身份</span><b>待连接</b></span>}
<IdentitySelector identity={identity||{role:roleHint}} pending={!identity}/>
</nav>;
}
+3 -2
View File
@@ -4,8 +4,8 @@ import {ShieldCheck} from "lucide-react";
export const ROLE_LABEL:Record<string,string>={manager:"客户经理",reviewer:"评审员",admin:"配置管理员"};
export default function IdentitySelector({identity,dark=false}:{identity:any;dark?:boolean}){
const role=identity?.role||"manager";
export default function IdentitySelector({identity,dark=false,pending=false}:{identity:any;dark?:boolean;pending?:boolean}){
const role=identity?.role||(pending?"":"manager");
function switchRole(next:string){
sessionStorage.removeItem("xingbang-access-token");
sessionStorage.setItem("xingbang-demo-role",next);
@@ -14,6 +14,7 @@ export default function IdentitySelector({identity,dark=false}:{identity:any;dar
return <label className={`xb-role-switch role-${role}${dark?" dark":""}`}>
<span>当前身份</span><ShieldCheck size={16}/>
<select aria-label="切换演示身份" value={role} onChange={event=>switchRole(event.target.value)}>
{pending&&<option value="" disabled>选择身份</option>}
<option value="manager">客户经理</option><option value="reviewer">评审员</option><option value="admin">配置管理员</option>
</select>
</label>;