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
This commit is contained in:
Lewis Sanchez
2022-05-03 14:08:32 -07:00
committed by GitHub
parent b36ee9318f
commit fcf00b79fc

View File

@@ -199,8 +199,10 @@ export abstract class AzureAuth implements vscode.Disposable {
if (remainingTime < maxTolerance) { if (remainingTime < maxTolerance) {
const result = await this.refreshToken(tenant, resource, cachedTokens.refreshToken); const result = await this.refreshToken(tenant, resource, cachedTokens.refreshToken);
accessToken = result.accessToken; if (result) {
expiresOn = Number(result.expiresOn); accessToken = result.accessToken;
expiresOn = Number(result.expiresOn);
}
} }
// Let's just return here. // Let's just return here.
if (accessToken) { 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. // 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); const result = await this.refreshToken(tenant, resource, baseTokens.refreshToken);
if (result.accessToken) { if (result?.accessToken) {
return { return {
...result.accessToken, ...result.accessToken,
expiresOn: Number(result.expiresOn), expiresOn: Number(result.expiresOn),
@@ -242,8 +244,10 @@ export abstract class AzureAuth implements vscode.Disposable {
* @param tenant * @param tenant
* @param resource * @param resource
* @param refreshToken * @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<OAuthTokenResponse> { public async refreshToken(tenant: Tenant, resource: Resource, refreshToken: RefreshToken | undefined): Promise<OAuthTokenResponse> | undefined {
Logger.pii('Refreshing token', [{ name: 'token', objOrArray: refreshToken }], []); Logger.pii('Refreshing token', [{ name: 'token', objOrArray: refreshToken }], []);
if (refreshToken) { if (refreshToken) {
const postData: RefreshTokenPostData = { const postData: RefreshTokenPostData = {