FormidableLabs / FormidableLabs/react-native-app-auth
Unable to get accessToken in offline mode returning "null"?
- Dominant language
- Java
- Stars
- 2.3k
- Forks
- 473
- PR merge metrics
- No merged PRs in 30d
Description
## In offline mode, the Access token returns null even added the "offline_access" in the scope
Here the scope
API_ACCESS_SCOPE: [
'offline_access',
'api://xxxxxxxxxxxxxxxxxx/api-access',
],
getAzureApiAccessConfig() {
return {
issuer: `${MS_BASE_API_URL}${TENANT_ID}/v2.0`,
clientId: APP_ID,
redirectUrl: REDIRECT_URL,
scopes: API_ACCESS_SCOPE,
// additionalParameters: {prompt: 'select_account'},
serviceConfiguration: {
authorizationEndpoint: `${MS_BASE_API_URL}${TENANT_ID}/oauth2/v2.0/authorize`,
tokenEndpoint: `${MS_BASE_API_URL}${TENANT_ID}/oauth2/v2.0/token`,
revocationEndpoint: `${MS_BASE_API_URL}${TENANT_ID}/oauth2/v2.0/logout`,
},
};
}
async getAccessTokenAsync() {
try {
const userInfo = await this.getUserInfo();
const expireTime = userInfo.apiAccessTokens
? userInfo.apiAccessTokens.expiryTime
: null;
console.log('expireTime :>> ', expireTime);
if (expireTime !== null) {
// Get expiration time - 5 minutes
// If it's <= 5 minutes before expiration, then refresh
const expire = sub(parseISO(expireTime), {minutes: 5});
const now = new Date();
console.log(
'Expire comparison :>> ',
expire,
now,
compareAsc(now, expire),
);
if (compareAsc(now, expire) >= 0) {
// Expired, refresh
console.log('Refreshing token');
const refreshToken = userInfo.apiAccessTokens
? userInfo.apiAccessTokens.refreshToken
: null;
console.log(`Refresh token: ${refreshToken}`);
const result = await refresh(this.getAzureApiAccessConfig(), {
refreshToken: refreshToken || '',
});
if (!result?.accessToken) {
await this.logOut();
return null;
}
// Store the new access token, refresh token, and expiration time in storage
await SECURE_STORAGE.saveData(KEY_AUTH_USER_INFO, {
...userInfo,
apiAccessTokens: {
accessToken: result.accessToken,
refreshToken: result.refreshToken ?? '',
expiryTime: result.accessTokenExpirationDate,
},
});
return result.accessToken;
}
// Not expired, just return saved access token
const accessToken = userInfo.apiAccessTokens
? userInfo.apiAccessTokens.accessToken
: null;
return accessToken;
}
return null;
} catch (error) {
console.log('error while fetching access token :>> ', error);
await this.logOut();
return null;
}
}
please help me what's went wrong?
Contributor guide
Assessment
This issue has not been assessed yet.