Skip to content

Commit 554a0d3

Browse files
authored
fix(dart): fix getAccessToken always null bug (#67)
1 parent de35beb commit 554a0d3

File tree

3 files changed

+21
-21
lines changed

3 files changed

+21
-21
lines changed

lib/logto_client.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ class LogtoClient {
161161
}
162162

163163
return await _tokenStorage.getAccessToken(
164-
resource: resource, organizationId: organizationId, scopes: scopes);
164+
resource: resource, organizationId: organizationId);
165165
} finally {
166166
if (_httpClient == null) httpClient.close();
167167
}
@@ -257,7 +257,8 @@ class LogtoClient {
257257
idToken: idToken,
258258
accessToken: tokenResponse.accessToken,
259259
refreshToken: tokenResponse.refreshToken,
260-
expiresIn: tokenResponse.expiresIn);
260+
expiresIn: tokenResponse.expiresIn,
261+
scopes: tokenResponse.scope.split(' '));
261262
}
262263

263264
// Sign out the user.

lib/src/modules/token_storage.dart

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,10 @@ class TokenStorage {
9292

9393
Future<AccessToken?> getAccessToken({
9494
String? resource,
95-
List<String>? scopes,
9695
String? organizationId,
9796
}) async {
98-
final key = buildAccessTokenKey(
99-
resource: resource, scopes: scopes, organizationId: organizationId);
97+
final key =
98+
buildAccessTokenKey(resource: resource, organizationId: organizationId);
10099

101100
_accessTokenMap ??= await _getAccessTokenMapFromStorage();
102101

@@ -145,7 +144,9 @@ class TokenStorage {
145144
String? organizationId,
146145
required int expiresIn}) async {
147146
final key = buildAccessTokenKey(
148-
resource: resource, organizationId: organizationId, scopes: scopes);
147+
resource: resource,
148+
organizationId: organizationId,
149+
);
149150

150151
// load current accessTokenMap
151152
final currentAccessTokenMap =
@@ -197,10 +198,11 @@ class TokenStorage {
197198
required IdToken idToken,
198199
required String accessToken,
199200
String? refreshToken,
201+
List<String>? scopes,
200202
required int expiresIn,
201203
}) async {
202204
await Future.wait([
203-
setAccessToken(accessToken, expiresIn: expiresIn),
205+
setAccessToken(accessToken, expiresIn: expiresIn, scopes: scopes),
204206
setIdToken(idToken),
205207
setRefreshToken(refreshToken),
206208
]);

test/modules/token_storage_test.dart

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,14 @@ void main() {
3636
});
3737
test('should set access token locally and persist it', () async {
3838
await sut.setAccessToken(accessToken,
39-
resource: resource, scopes: scope.split(' '), expiresIn: 1);
39+
resource: resource, scopes: scope.split(' '), expiresIn: 1000);
4040

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

4444
final tokenStorage = await sut.getAccessToken(
45-
resource: resource, scopes: scope.split(' '));
45+
resource: resource,
46+
);
4647

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

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

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

74-
final tokenStorage = await sut.getAccessToken(
75-
scopes: scope.split(' '), organizationId: organizationId);
75+
final tokenStorage =
76+
await sut.getAccessToken(organizationId: organizationId);
7677

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

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

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

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

100100
final tokenStorage = await sut.getAccessToken(
101-
resource: resource, scopes: scope.split(' '));
101+
resource: resource,
102+
);
102103
expect(tokenStorage?.token, accessToken);
103104

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

160160
await sut.clear();
161161

162-
expect(
163-
await sut.getAccessToken(
164-
resource: resource, scopes: scope.split(' ')),
165-
null);
162+
expect(await sut.getAccessToken(resource: resource), null);
166163
expect(await sut.refreshToken, null);
167164
expect(await sut.idToken, null);
168165

0 commit comments

Comments
 (0)