TF-1440 Fix user can not sign again after click back browser button in OIDC
(cherry picked from commit 27ff8d3a834306bf7f3711e0df85e7da126c7160)
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/local/authentication_info_cache_manager.dart';
|
import 'package:tmail_ui_user/features/login/data/local/authentication_info_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/model/authentication_info_cache.dart';
|
import 'package:tmail_ui_user/features/login/data/model/authentication_info_cache.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/utils/login_constant.dart';
|
import 'package:tmail_ui_user/features/login/domain/model/login_constants.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
|
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
|
||||||
|
|
||||||
class CredentialRepositoryImpl extends CredentialRepository {
|
class CredentialRepositoryImpl extends CredentialRepository {
|
||||||
@@ -17,17 +17,17 @@ class CredentialRepositoryImpl extends CredentialRepository {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Uri> getBaseUrl() async {
|
Future<Uri> getBaseUrl() async {
|
||||||
return Uri.parse(sharedPreferences.getString(LoginConstant.keyBaseUrl) ?? '');
|
return Uri.parse(sharedPreferences.getString(LoginConstants.KEY_BASE_URL) ?? '');
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future saveBaseUrl(Uri baseUrl) async {
|
Future saveBaseUrl(Uri baseUrl) async {
|
||||||
await sharedPreferences.setString(LoginConstant.keyBaseUrl, baseUrl.toString());
|
await sharedPreferences.setString(LoginConstants.KEY_BASE_URL, baseUrl.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future removeBaseUrl() async {
|
Future removeBaseUrl() async {
|
||||||
await sharedPreferences.remove(LoginConstant.keyBaseUrl);
|
await sharedPreferences.remove(LoginConstants.KEY_BASE_URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
class LoginConstant {
|
|
||||||
static const String keyBaseUrl = 'KEY_BASE_URL';
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
class LoginConstants {
|
||||||
|
static const String KEY_BASE_URL = 'KEY_BASE_URL';
|
||||||
|
static const String AUTH_DESTINATION_KEY = "auth_destination_url";
|
||||||
|
}
|
||||||
@@ -16,6 +16,7 @@ import 'package:model/oidc/request/oidc_request.dart';
|
|||||||
import 'package:model/oidc/response/oidc_response.dart';
|
import 'package:model/oidc/response/oidc_response.dart';
|
||||||
import 'package:model/oidc/token_oidc.dart';
|
import 'package:model/oidc/token_oidc.dart';
|
||||||
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/login/domain/model/login_constants.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/model/recent_login_url.dart';
|
import 'package:tmail_ui_user/features/login/domain/model/recent_login_url.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/model/recent_login_username.dart';
|
import 'package:tmail_ui_user/features/login/domain/model/recent_login_username.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/state/authenticate_oidc_on_browser_state.dart';
|
import 'package:tmail_ui_user/features/login/domain/state/authenticate_oidc_on_browser_state.dart';
|
||||||
@@ -53,6 +54,7 @@ import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
|||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||||
|
import 'package:universal_html/html.dart' as html;
|
||||||
|
|
||||||
class LoginController extends ReloadableController {
|
class LoginController extends ReloadableController {
|
||||||
|
|
||||||
@@ -70,7 +72,6 @@ class LoginController extends ReloadableController {
|
|||||||
final SaveLoginUsernameOnMobileInteractor _saveLoginUsernameOnMobileInteractor;
|
final SaveLoginUsernameOnMobileInteractor _saveLoginUsernameOnMobileInteractor;
|
||||||
final GetAllRecentLoginUsernameOnMobileInteractor _getAllRecentLoginUsernameOnMobileInteractor;
|
final GetAllRecentLoginUsernameOnMobileInteractor _getAllRecentLoginUsernameOnMobileInteractor;
|
||||||
|
|
||||||
|
|
||||||
final TextEditingController urlInputController = TextEditingController();
|
final TextEditingController urlInputController = TextEditingController();
|
||||||
final TextEditingController usernameInputController = TextEditingController();
|
final TextEditingController usernameInputController = TextEditingController();
|
||||||
final NetworkConnectionController networkConnectionController = Get.find<NetworkConnectionController>();
|
final NetworkConnectionController networkConnectionController = Get.find<NetworkConnectionController>();
|
||||||
@@ -277,6 +278,7 @@ class LoginController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _getOIDCConfigurationSuccess(GetOIDCConfigurationSuccess success) {
|
void _getOIDCConfigurationSuccess(GetOIDCConfigurationSuccess success) {
|
||||||
|
log('LoginController::_getOIDCConfigurationSuccess():success: $success');
|
||||||
loginState.value = LoginState(Right(success));
|
loginState.value = LoginState(Right(success));
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_authenticateOidcOnBrowserAction(success.oidcConfiguration);
|
_authenticateOidcOnBrowserAction(success.oidcConfiguration);
|
||||||
@@ -295,6 +297,8 @@ class LoginController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _authenticateOidcOnBrowserAction(OIDCConfiguration config) async {
|
void _authenticateOidcOnBrowserAction(OIDCConfiguration config) async {
|
||||||
|
_removeAuthDestinationUrlInSessionStorage();
|
||||||
|
|
||||||
final baseUri = _parseUri(AppConfig.baseUrl);
|
final baseUri = _parseUri(AppConfig.baseUrl);
|
||||||
if (baseUri != null) {
|
if (baseUri != null) {
|
||||||
consumeState(_authenticateOidcOnBrowserInteractor.execute(baseUri, config));
|
consumeState(_authenticateOidcOnBrowserInteractor.execute(baseUri, config));
|
||||||
@@ -303,6 +307,13 @@ class LoginController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _removeAuthDestinationUrlInSessionStorage() {
|
||||||
|
final authDestinationUrlExist = html.window.sessionStorage.containsKey(LoginConstants.AUTH_DESTINATION_KEY);
|
||||||
|
if (authDestinationUrlExist) {
|
||||||
|
html.window.sessionStorage.remove(LoginConstants.AUTH_DESTINATION_KEY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _getTokenOIDCSuccess(GetTokenOIDCSuccess success) {
|
void _getTokenOIDCSuccess(GetTokenOIDCSuccess success) {
|
||||||
log('LoginController::_getTokenOIDCSuccess(): ${success.tokenOIDC.toString()}');
|
log('LoginController::_getTokenOIDCSuccess(): ${success.tokenOIDC.toString()}');
|
||||||
loginState.value = LoginState(Right(success));
|
loginState.value = LoginState(Right(success));
|
||||||
|
|||||||
Reference in New Issue
Block a user