Skip to content

Commit

Permalink
fix(dart): fix getAccessToken always null bug
Browse files Browse the repository at this point in the history
fix getAccessToken always null bug
  • Loading branch information
simeng-li committed Sep 5, 2024
1 parent de35beb commit 8b579da
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 21 deletions.
5 changes: 3 additions & 2 deletions lib/logto_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ class LogtoClient {
}

return await _tokenStorage.getAccessToken(
resource: resource, organizationId: organizationId, scopes: scopes);
resource: resource, organizationId: organizationId);
} finally {
if (_httpClient == null) httpClient.close();
}
Expand Down Expand Up @@ -257,7 +257,8 @@ class LogtoClient {
idToken: idToken,
accessToken: tokenResponse.accessToken,
refreshToken: tokenResponse.refreshToken,
expiresIn: tokenResponse.expiresIn);
expiresIn: tokenResponse.expiresIn,
scopes: tokenResponse.scope.split(' '));
}

// Sign out the user.
Expand Down
12 changes: 7 additions & 5 deletions lib/src/modules/token_storage.dart
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,10 @@ class TokenStorage {

Future<AccessToken?> getAccessToken({
String? resource,
List<String>? scopes,
String? organizationId,
}) async {
final key = buildAccessTokenKey(
resource: resource, scopes: scopes, organizationId: organizationId);
final key =
buildAccessTokenKey(resource: resource, organizationId: organizationId);

_accessTokenMap ??= await _getAccessTokenMapFromStorage();

Expand Down Expand Up @@ -145,7 +144,9 @@ class TokenStorage {
String? organizationId,
required int expiresIn}) async {
final key = buildAccessTokenKey(
resource: resource, organizationId: organizationId, scopes: scopes);
resource: resource,
organizationId: organizationId,
);

// load current accessTokenMap
final currentAccessTokenMap =
Expand Down Expand Up @@ -197,10 +198,11 @@ class TokenStorage {
required IdToken idToken,
required String accessToken,
String? refreshToken,
List<String>? scopes,
required int expiresIn,
}) async {
await Future.wait([
setAccessToken(accessToken, expiresIn: expiresIn),
setAccessToken(accessToken, expiresIn: expiresIn, scopes: scopes),
setIdToken(idToken),
setRefreshToken(refreshToken),
]);
Expand Down
25 changes: 11 additions & 14 deletions test/modules/token_storage_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,14 @@ void main() {
});
test('should set access token locally and persist it', () async {
await sut.setAccessToken(accessToken,
resource: resource, scopes: scope.split(' '), expiresIn: 1);
resource: resource, scopes: scope.split(' '), expiresIn: 1000);

final nullToken = await sut.getAccessToken();
expect(nullToken, isNull);

final tokenStorage = await sut.getAccessToken(
resource: resource, scopes: scope.split(' '));
resource: resource,
);

expect(tokenStorage?.token, accessToken);
// scope should be sorted
Expand All @@ -53,7 +54,7 @@ void main() {
await storageStrategy.read(key: _TokenStorageKeys.accessTokenKey);

final tokenMap = jsonDecode(persistedStorageAccessToken ?? '{}');
final Map<String, dynamic> token = tokenMap['email profile@/api/foo'];
final Map<String, dynamic> token = tokenMap['@/api/foo'];

expect(token['token'], tokenStorage?.token);
expect(token['scope'], tokenStorage?.scope);
Expand All @@ -71,8 +72,8 @@ void main() {
final nullToken = await sut.getAccessToken();
expect(nullToken, isNull);

final tokenStorage = await sut.getAccessToken(
scopes: scope.split(' '), organizationId: organizationId);
final tokenStorage =
await sut.getAccessToken(organizationId: organizationId);

expect(tokenStorage?.token, accessToken);
// scope should be sorted
Expand All @@ -84,8 +85,7 @@ void main() {

final tokenMap = jsonDecode(persistedStorageAccessToken ?? '{}');

final Map<String, dynamic> token =
tokenMap['email profile@#$organizationId'];
final Map<String, dynamic> token = tokenMap['@#$organizationId'];

expect(token['token'], tokenStorage?.token);
expect(token['scope'], tokenStorage?.scope);
Expand All @@ -98,12 +98,12 @@ void main() {
resource: resource, scopes: scope.split(' '), expiresIn: 1);

final tokenStorage = await sut.getAccessToken(
resource: resource, scopes: scope.split(' '));
resource: resource,
);
expect(tokenStorage?.token, accessToken);

await Future.delayed(const Duration(seconds: 2), () async {
final token = await sut.getAccessToken(
resource: resource, scopes: scope.split(' '));
final token = await sut.getAccessToken(resource: resource);
expect(token, isNull);
expect(
await storageStrategy.read(key: _TokenStorageKeys.accessTokenKey),
Expand Down Expand Up @@ -159,10 +159,7 @@ void main() {

await sut.clear();

expect(
await sut.getAccessToken(
resource: resource, scopes: scope.split(' ')),
null);
expect(await sut.getAccessToken(resource: resource), null);
expect(await sut.refreshToken, null);
expect(await sut.idToken, null);

Expand Down

0 comments on commit 8b579da

Please sign in to comment.