-
-
Save guilherme-v/dc6ddcd4cad0962f89a82e4f018b87db to your computer and use it in GitHub Desktop.
| import 'package:http/http.dart' as http; | |
| import 'package:shared_preferences/shared_preferences.dart'; | |
| class AuthenticatedHttpClient extends http.BaseClient { | |
| SharedPreferences sharedPref; | |
| AuthenticatedHttpClient({this.sharedPref}); | |
| // Use a memory cache to avoid local storage access in each call | |
| String _inMemoryToken = ''; | |
| String get userAccessToken { | |
| // use in memory token if available | |
| if (_inMemoryToken.isNotEmpty) return _inMemoryToken; | |
| // otherwise load it from local storage | |
| _inMemoryToken = _loadTokenFromSharedPreference(); | |
| return _inMemoryToken; | |
| } | |
| @override | |
| Future<http.StreamedResponse> send(http.BaseRequest request) { | |
| // intercept each call and add the Authorization header if token is available | |
| if (userAccessToken.isNotEmpty) { | |
| request.headers.putIfAbsent('Authorization', () => userAccessToken); | |
| } | |
| return request.send(); | |
| } | |
| String _loadTokenFromSharedPreference() { | |
| var accessToken = ''; | |
| final user = sharedPref.getString(CACHED_USER); | |
| // If user is already authenticated, we can load his token from cache | |
| if (user != null) { | |
| accessToken = user.accessToken; | |
| } | |
| return accessToken; | |
| } | |
| // Don't forget to reset the cache when logging out the user | |
| void reset() { | |
| _inMemoryToken = ''; | |
| } | |
| } |
Hello! Thx for the code. Why don't you reset the "_inMemoryToken" along with sharedPref CACHED_USER on log out?
Hi! We have a different class that is responsible for reseting all the sharedPref variables. In this case we'd preferred to only reset variables related to (owned by) the HttpClient. Besides it was a precaution in case you want to start using more than a single AuthenticatedHttpClient instance
But do what works better/(makes more sense) to your project :D π
Hello! Thx for the code. Why don't you reset the "_inMemoryToken" along with sharedPref CACHED_USER on log out?
Hi! We have a different class that is responsible for reseting all the sharedPref variables. In this case we'd preferred to only reset variables related to (owned by) the HttpClient. Besides it was a precaution in case you want to start using more than a single AuthenticatedHttpClient instance
But do what works better/(makes more sense) to your project :D π
Thank you very much! π€π»
Hello! Thx for the code. Why don't you reset the "_inMemoryToken" along with sharedPref CACHED_USER on log out?