From fcf00b79fc465d89d53b972b274eae64d6db54d6 Mon Sep 17 00:00:00 2001 From: Lewis Sanchez <87730006+lewis-sanchez@users.noreply.github.com> Date: Tue, 3 May 2022 14:08:32 -0700 Subject: [PATCH] Resolves cannot read property 'accessToken' of undefined error while connecting to a cloud DB (#19192) * Resolves cannot read property 'accessToken' of undefined. * Checks for and specifies undefined as refreshToken return type * Adds documentation and checks for undefined results from refreshToken --- .../src/account-provider/auths/azureAuth.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/extensions/azurecore/src/account-provider/auths/azureAuth.ts b/extensions/azurecore/src/account-provider/auths/azureAuth.ts index 0d298a3990..7ff77f8318 100644 --- a/extensions/azurecore/src/account-provider/auths/azureAuth.ts +++ b/extensions/azurecore/src/account-provider/auths/azureAuth.ts @@ -199,8 +199,10 @@ export abstract class AzureAuth implements vscode.Disposable { if (remainingTime < maxTolerance) { const result = await this.refreshToken(tenant, resource, cachedTokens.refreshToken); - accessToken = result.accessToken; - expiresOn = Number(result.expiresOn); + if (result) { + accessToken = result.accessToken; + expiresOn = Number(result.expiresOn); + } } // Let's just return here. if (accessToken) { @@ -223,7 +225,7 @@ export abstract class AzureAuth implements vscode.Disposable { } // Let's try to convert the access token type, worst case we'll have to prompt the user to do an interactive authentication. const result = await this.refreshToken(tenant, resource, baseTokens.refreshToken); - if (result.accessToken) { + if (result?.accessToken) { return { ...result.accessToken, expiresOn: Number(result.expiresOn), @@ -242,8 +244,10 @@ export abstract class AzureAuth implements vscode.Disposable { * @param tenant * @param resource * @param refreshToken + * @returns The oauth token response or undefined. Undefined is returned when the user wants to ignore a tenant or chooses not to start the + * re-authentication process for their tenant. */ - public async refreshToken(tenant: Tenant, resource: Resource, refreshToken: RefreshToken | undefined): Promise { + public async refreshToken(tenant: Tenant, resource: Resource, refreshToken: RefreshToken | undefined): Promise | undefined { Logger.pii('Refreshing token', [{ name: 'token', objOrArray: refreshToken }], []); if (refreshToken) { const postData: RefreshTokenPostData = {