diff --git a/lib/src/base/parse_constants.dart b/lib/src/base/parse_constants.dart index 2b43a59fc..8a0f0d5d0 100644 --- a/lib/src/base/parse_constants.dart +++ b/lib/src/base/parse_constants.dart @@ -7,6 +7,7 @@ const String keyLibraryName = 'Flutter Parse SDK'; // End Points const String keyEndPointUserName = '/users/me'; const String keyEndPointLogin = '/login'; +const String keyEndPointLogout = '/logout'; const String keyEndPointUsers = '/users'; const String keyEndPointVerificationEmail = '/verificationEmailRequest'; const String keyEndPointRequestPasswordReset = '/requestPasswordReset'; diff --git a/lib/src/enums/parse_enum_api_rq.dart b/lib/src/enums/parse_enum_api_rq.dart index 0d9d93db5..6b6f2b338 100644 --- a/lib/src/enums/parse_enum_api_rq.dart +++ b/lib/src/enums/parse_enum_api_rq.dart @@ -12,6 +12,7 @@ enum ParseApiRQ { currentUser, signUp, login, + logout, loginAnonymous, verificationEmailRequest, requestPasswordReset, diff --git a/lib/src/objects/parse_user.dart b/lib/src/objects/parse_user.dart index fee5fc2bc..45dd46bdd 100644 --- a/lib/src/objects/parse_user.dart +++ b/lib/src/objects/parse_user.dart @@ -200,11 +200,35 @@ class ParseUser extends ParseObject implements ParseCloneable { } } - /// Removes the current user from the session data - logout() { - _client.data.sessionId = null; - unpin(key: keyParseStoreUser); - setObjectData(null); + /// Sends a request to delete the sessions token from the + /// server. Will also delete the local user data unless + /// deleteLocalUserData is false. + logout({bool deleteLocalUserData = true}) async { + if (deleteLocalUserData) { + _client.data.sessionId = null; + unpin(key: keyParseStoreUser); + setObjectData(null); + } + + try { + if (username == null) return null; + + Uri tempUri = Uri.parse(_client.data.serverUrl); + + Uri url = Uri( + scheme: tempUri.scheme, + host: tempUri.host, + path: "${tempUri.path}$keyEndPointLogout"); + + final response = await _client.post( + url, + ); + + return _handleResponse( + this, response, ParseApiRQ.logout, _debug, className); + } on Exception catch (e) { + return _handleException(e, ParseApiRQ.logout, _debug, className); + } } /// Sends a verification email to the users email address