diff --git a/src/extension.ts b/src/extension.ts index e0dcf046..958ac587 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -275,6 +275,11 @@ export async function resolveConnectionSpec(serverName: string, uri?: vscode.Uri } } +interface ServerManagerAuthSession extends vscode.AuthenticationSession { + serverName: string; + userName: string; +} + async function resolvePassword(serverSpec, ignoreUnauthenticated = false): Promise { if ( // Connection isn't unauthenticated @@ -287,19 +292,27 @@ async function resolvePassword(serverSpec, ignoreUnauthenticated = false): Promi // Handle Server Manager extension version < 3.8.0 const account = serverManagerApi.getAccount ? serverManagerApi.getAccount(serverSpec) : undefined; - let session = await vscode.authentication.getSession(serverManager.AUTHENTICATION_PROVIDER, scopes, { - silent: true, - account, - }); - if (!session) { - session = await vscode.authentication.getSession(serverManager.AUTHENTICATION_PROVIDER, scopes, { - createIfNone: true, + let session = await vscode.authentication.getSession( + serverManager.AUTHENTICATION_PROVIDER, + scopes, + { + silent: true, account, - }); + } + ); + if (!session) { + session = await vscode.authentication.getSession( + serverManager.AUTHENTICATION_PROVIDER, + scopes, + { + createIfNone: true, + account, + } + ); } if (session) { // If original spec lacked username use the one obtained by the authprovider - serverSpec.username = serverSpec.username || session.scopes[1]; + serverSpec.username = serverSpec.username || session.userName; serverSpec.password = session.accessToken; } }