setPersistence method
- Persistence persistence
Sets the persistence type for authentication state.
persistence The persistence type to set.
Handles switching persistence, migrating tokens if needed.
Returns a Future that completes with a boolean indicating success.
Example:
bool success = await auth.setPersistence(Persistence.LOCAL);
Implementation
Future<bool> setPersistence(Persistence persistence) async {
await _initFuture;
IdTokenResult? accessToken;
String? refreshToken;
String? loginState;
String? verifier;
String? providerId;
if (!kIsWeb) {
throw FusabaseAuthException(
message: AuthErrorMessageTemplates.PERSISTENCE_WEB_ONLY,
code: 'invalid-persistence',
);
}
try {
accessToken = await __getIdTokenResult(
app.options.appID + globals.accessTokenKey,
);
refreshToken = await __getToken(
app.options.appID + globals.refreshTokenKey,
);
} catch (e) {
//do nothing
}
for (var j = 0; j < 4; j++) {
if (accessToken != null && refreshToken != null) {
break;
}
switch (j) {
case 0:
_persistenceManager.setLocalPersistence();
break;
case 1:
_persistenceManager.setIndexedDBPersistence();
break;
case 2:
_persistenceManager.setSessionPersistence();
break;
case 3:
_persistenceManager.setInMemoryPersistence();
break;
}
accessToken = await __getIdTokenResult(
app.options.appID + globals.accessTokenKey,
);
refreshToken = await __getToken(
app.options.appID + globals.refreshTokenKey,
);
}
await __removeCredTokens();
if (accessToken == null || refreshToken == null) {
await _signOutOnEvent();
return _persistenceManager.setPersistence(persistence);
} else {
dynamic res = await _persistenceManager.setPersistence(persistence);
if (!res) {
await __setCredTokens({
"accessToken": accessToken,
"refreshToken": refreshToken,
});
return false;
}
await __setCredTokens({
"accessToken": accessToken,
"refreshToken": refreshToken,
});
_syncLoginPersistence(accessToken.token, refreshToken);
dynamic userDetails;
try {
userDetails = await _authHelper.getUserDetails(
accessToken: accessToken,
);
} catch (e) {
__updateCurrentUser(null);
return true;
}
final User user = User(
user: userDetails,
auth: this,
accessToken: accessToken,
refreshToken: refreshToken,
);
await user.getFUSABASEToken();
__updateCurrentUser(user);
return true;
}
}