Skip to content

Commit 0470383

Browse files
committed
feat: Implement access token migration from legacy SharedPreferences to new SharedPreferencesAsync
1 parent 44719d0 commit 0470383

File tree

1 file changed

+27
-12
lines changed

1 file changed

+27
-12
lines changed

packages/supabase_flutter/lib/src/local_storage.dart

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,21 @@ class SharedPreferencesLocalStorage extends LocalStorage {
7878
if (!_useWebLocalStorage) {
7979
WidgetsFlutterBinding.ensureInitialized();
8080
_prefs = SharedPreferencesAsync();
81+
82+
await _maybeMigrateAccessToken();
83+
}
84+
}
85+
86+
Future<void> _maybeMigrateAccessToken() async {
87+
final legacyPrefs = await SharedPreferences.getInstance();
88+
89+
if (legacyPrefs.containsKey(persistSessionKey)) {
90+
final accessToken = legacyPrefs.getString(persistSessionKey);
91+
92+
if (accessToken != null) {
93+
await legacyPrefs.remove(persistSessionKey);
94+
await _prefs.setString(persistSessionKey, accessToken);
95+
}
8196
}
8297
}
8398

@@ -118,34 +133,34 @@ class SharedPreferencesLocalStorage extends LocalStorage {
118133
/// local storage to store pkce flow code verifier.
119134
class SharedPreferencesGotrueAsyncStorage extends GotrueAsyncStorage {
120135
SharedPreferencesGotrueAsyncStorage() {
121-
_initialize();
136+
initialize();
122137
}
123138

124-
final Completer<void> _initializationCompleter = Completer();
139+
final Completer<void> initializationCompleter = Completer();
125140

126-
late final SharedPreferences _prefs;
141+
late final SharedPreferences prefs;
127142

128-
Future<void> _initialize() async {
143+
Future<void> initialize() async {
129144
WidgetsFlutterBinding.ensureInitialized();
130-
_prefs = await SharedPreferences.getInstance();
131-
_initializationCompleter.complete();
145+
prefs = await SharedPreferences.getInstance();
146+
initializationCompleter.complete();
132147
}
133148

134149
@override
135150
Future<String?> getItem({required String key}) async {
136-
await _initializationCompleter.future;
137-
return _prefs.getString(key);
151+
await initializationCompleter.future;
152+
return prefs.getString(key);
138153
}
139154

140155
@override
141156
Future<void> removeItem({required String key}) async {
142-
await _initializationCompleter.future;
143-
await _prefs.remove(key);
157+
await initializationCompleter.future;
158+
await prefs.remove(key);
144159
}
145160

146161
@override
147162
Future<void> setItem({required String key, required String value}) async {
148-
await _initializationCompleter.future;
149-
await _prefs.setString(key, value);
163+
await initializationCompleter.future;
164+
await prefs.setString(key, value);
150165
}
151166
}

0 commit comments

Comments
 (0)