mirror of
https://github.com/trailbaseio/trailbase
synced 2026-04-21 13:37:44 +00:00
Dart client: cleanup make refresh token a free function to make the intent clearer.
This commit is contained in:
parent
3b96652888
commit
970c9e0cbd
2 changed files with 21 additions and 13 deletions
|
|
@ -356,7 +356,8 @@ class RecordApi {
|
|||
|
||||
final refreshToken = _client._tokenState._shouldRefresh();
|
||||
if (refreshToken != null) {
|
||||
_client._tokenState = await _client._refreshTokensImpl(refreshToken);
|
||||
_client._tokenState =
|
||||
await _refreshTokensImpl(_client._transport, refreshToken);
|
||||
}
|
||||
|
||||
final uri = _client._baseUrl.replace(
|
||||
|
|
@ -539,7 +540,7 @@ class Client {
|
|||
Future<void> refreshAuthToken() async {
|
||||
final refreshToken = _tokenState._shouldRefresh();
|
||||
if (refreshToken != null) {
|
||||
_tokenState = await _refreshTokensImpl(refreshToken);
|
||||
_tokenState = await _refreshTokensImpl(_transport, refreshToken);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -552,7 +553,7 @@ class Client {
|
|||
}) async {
|
||||
final refreshToken = _tokenState._shouldRefresh();
|
||||
if (refreshToken != null) {
|
||||
_tokenState = await _refreshTokensImpl(refreshToken);
|
||||
_tokenState = await _refreshTokensImpl(_transport, refreshToken);
|
||||
}
|
||||
|
||||
final response = await _transport.fetch(
|
||||
|
|
@ -590,19 +591,24 @@ class Client {
|
|||
|
||||
return state;
|
||||
}
|
||||
}
|
||||
|
||||
Future<_TokenState> _refreshTokensImpl(String refreshToken) async {
|
||||
final response = await _transport.fetch('${_authApi}/refresh',
|
||||
method: Method.post,
|
||||
headers: _tokenState.headers,
|
||||
body: jsonEncode({
|
||||
'refresh_token': refreshToken,
|
||||
}));
|
||||
Future<_TokenState> _refreshTokensImpl(
|
||||
Transport transport,
|
||||
String refreshToken,
|
||||
) async {
|
||||
// NOTE: We cannot use `Client.fetch`, which may refresh tokens to prevent a loop.
|
||||
final response = await transport.fetch('${_authApi}/refresh',
|
||||
method: Method.post,
|
||||
body: jsonEncode({
|
||||
'refresh_token': refreshToken,
|
||||
}));
|
||||
|
||||
final tokens = Tokens.fromJson(jsonDecode(response.body));
|
||||
assert(tokens.refresh == refreshToken);
|
||||
return _updateTokens(tokens);
|
||||
if (response.statusCode != 200) {
|
||||
throw HttpException(response.statusCode, response.body);
|
||||
}
|
||||
|
||||
return _TokenState.build(Tokens.fromJson(jsonDecode(response.body)));
|
||||
}
|
||||
|
||||
Map<String, String> _buildHeaders(Tokens? tokens) {
|
||||
|
|
|
|||
|
|
@ -262,6 +262,8 @@ Future<void> main() async {
|
|||
await client.logout();
|
||||
expect(client.tokens(), isNull);
|
||||
|
||||
await client.refreshAuthToken();
|
||||
|
||||
// We need to wait a little to push the expiry time in seconds to avoid just getting the same token minted again.
|
||||
await Future.delayed(Duration(milliseconds: 1500));
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue