From 97d9f8fc80c77d276e3ed503d8ad5ac089aa5542 Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 17 Jul 2023 12:41:00 +0700 Subject: [PATCH] Add condition when token expired (cherry picked from commit 1664c16a1680b60c4fa98f729cebc0e786da0935) --- .../config/authorization_interceptors.dart | 50 ++++++++++--------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/lib/features/login/data/network/config/authorization_interceptors.dart b/lib/features/login/data/network/config/authorization_interceptors.dart index 702d2fd2b..2c62537e3 100644 --- a/lib/features/login/data/network/config/authorization_interceptors.dart +++ b/lib/features/login/data/network/config/authorization_interceptors.dart @@ -75,32 +75,36 @@ class AuthorizationInterceptors extends InterceptorsWrapper { @override void onError(DioError err, ErrorInterceptorHandler handler) async { - final requestOptions = err.requestOptions; log('AuthorizationInterceptors::onError(): $err'); - if (_isTokenExpired() && - err.response?.statusCode == 401 && + try { + if (_isTokenExpired() && + (err.response == null || err.response?.statusCode == 401) && _isRefreshTokenNotEmpty() && - _isAuthenticationOidcValid()) { - try { + _isAuthenticationOidcValid() + ) { final newToken = await _authenticationClient.refreshingTokensOIDC( - _configOIDC!.clientId, - _configOIDC!.redirectUrl, - _configOIDC!.discoveryUrl, - _configOIDC!.scopes, - _token!.refreshToken); + _configOIDC!.clientId, + _configOIDC!.redirectUrl, + _configOIDC!.discoveryUrl, + _configOIDC!.scopes, + _token!.refreshToken); final accountCurrent = await _accountCacheManager.getSelectedAccount(); + await _accountCacheManager.deleteSelectedAccount(_token!.tokenIdHash); + await Future.wait([ _tokenOidcCacheManager.persistOneTokenOidc(newToken), - _accountCacheManager.deleteSelectedAccount(_token!.tokenIdHash), - _accountCacheManager.setSelectedAccount(PersonalAccount( - newToken.tokenIdHash, - AuthenticationType.oidc, - isSelected: true, - accountId: accountCurrent.accountId, - apiUrl: accountCurrent.apiUrl, - userName: accountCurrent.userName)) + _accountCacheManager.setSelectedAccount( + PersonalAccount( + newToken.tokenIdHash, + AuthenticationType.oidc, + isSelected: true, + accountId: accountCurrent.accountId, + apiUrl: accountCurrent.apiUrl, + userName: accountCurrent.userName + ) + ) ]); log('AuthorizationInterceptors::onError(): refreshToken: $newToken'); @@ -108,16 +112,16 @@ class AuthorizationInterceptors extends InterceptorsWrapper { _updateNewToken(newToken.toToken()); - requestOptions.headers[HttpHeaders.authorizationHeader] = - _getTokenAsBearerHeader(newToken.token); + final requestOptions = err.requestOptions; + requestOptions.headers[HttpHeaders.authorizationHeader] = _getTokenAsBearerHeader(newToken.token); final response = await _dio.fetch(requestOptions); return handler.resolve(response); - } catch(e) { - log('AuthorizationInterceptors::onError(): $e'); + } else { super.onError(err, handler); } - } else { + } catch (e) { + log('AuthorizationInterceptors::onError():Exception: $e'); super.onError(err, handler); } }