fix: clear expired auth state before relogin

This commit is contained in:
Roe-xin
2026-03-02 14:51:11 +08:00
parent 5fc0fd2a95
commit f700473967
3 changed files with 44 additions and 11 deletions

View File

@ -161,18 +161,29 @@ export async function activate(context: vscode.ExtensionContext) {
"ic-coder.login",
async () => {
try {
// 先清除 session 偏好,避免 VSCode 弹出"账户不一致"确认框
try {
await vscode.authentication.getSession("iccoder", [], {
clearSessionPreference: true,
createIfNone: false
});
} catch {
// 忽略错误
const session = await vscode.authentication.getSession("iccoder", [], {
createIfNone: false,
});
const expired = session?.accessToken
? isTokenExpired(session.accessToken)
: null;
// 会话仍有效时,直接打开聊天面板
if (session && expired !== true) {
vscode.commands.executeCommand("ic-coder.openChat");
return;
}
// 创建新 session
await vscode.authentication.getSession("iccoder", [], { createIfNone: true });
// 1) 清空当前登录状态信息
await authProvider.clearSessionsForRelogin();
await context.globalState.update("icCoderSessions", []);
await context.globalState.update("icCoderUserInfo", undefined);
// 2) 重新登录(强制新会话)
await vscode.authentication.getSession("iccoder", [], {
clearSessionPreference: true,
forceNewSession: true,
});
} catch (error) {
vscode.window.showErrorMessage(`登录失败: ${error}`);
}