Skip to content

Commit 88f0b80

Browse files
authored
Merge pull request #80 from chrbayer/master
Fix sessionId handling to allow authentication with sessionId
2 parents 311e25e + 0e8734c commit 88f0b80

File tree

5 files changed

+21
-31
lines changed

5 files changed

+21
-31
lines changed

lib/parse_server_sdk.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,6 @@ class Parse {
8989
sessionId: sessionId,
9090
securityContext: securityContext);
9191

92-
ParseCoreData().initStorage();
93-
9492
_hasBeenInitialized = true;
9593

9694
return Parse();

lib/src/data/parse_core_data.dart

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,8 @@ class ParseCoreData {
5252
this.sessionId = sessionId;
5353
}
5454

55-
void initStorage() async {
56-
storage = await SharedPreferences.getInstance();
57-
}
58-
5955
Future<SharedPreferences> getStore() async {
60-
return storage != null ? storage : await SharedPreferences.getInstance();
56+
return storage ?? (storage = await SharedPreferences.getInstance());
6157
}
6258

6359
@override

lib/src/network/parse_http_client.dart

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,18 @@ class ParseHTTPClient extends BaseClient {
1717
Future<StreamedResponse> send(BaseRequest request) {
1818
request.headers[keyHeaderUserAgent] = _userAgent;
1919
request.headers[keyHeaderApplicationId] = data.applicationId;
20+
if ((data.sessionId != null) &&
21+
(request.headers[keyHeaderSessionToken] == null))
22+
request.headers[keyHeaderSessionToken] = data.sessionId;
2023

21-
if (data.clientKey != null) request.headers[keyHeaderClientKey] = data.clientKey;
22-
if (data.masterKey != null) request.headers[keyHeaderMasterKey] = data.masterKey;
24+
if (data.clientKey != null)
25+
request.headers[keyHeaderClientKey] = data.clientKey;
26+
if (data.masterKey != null)
27+
request.headers[keyHeaderMasterKey] = data.masterKey;
2328

2429
/// If developer wants to add custom headers, extend this class and add headers needed.
25-
if (additionalHeaders != null && additionalHeaders.length > 0){
26-
additionalHeaders.forEach((k,v) => request.headers[k] = v);
30+
if (additionalHeaders != null && additionalHeaders.length > 0) {
31+
additionalHeaders.forEach((k, v) => request.headers[k] = v);
2732
}
2833

2934
return _client.send(request);

lib/src/objects/parse_base.dart

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ abstract class ParseBase {
8888

8989
/// Returns the objects variables
9090
@protected
91-
Map getObjectData() => _objectData != null ? _objectData : Map();
91+
Map getObjectData() => _objectData ?? Map();
9292

9393
/// Saves in storage
9494
@protected
@@ -149,7 +149,7 @@ abstract class ParseBase {
149149
/// Replicates Android SDK pin process and saves object to storage
150150
Future<bool> unpin({String key}) async {
151151
if (objectId != null) {
152-
await SharedPreferences.getInstance()
152+
await ParseCoreData().getStore()
153153
..remove(key ?? objectId);
154154
return true;
155155
}
@@ -165,13 +165,7 @@ abstract class ParseBase {
165165
var itemFromStore =
166166
(await ParseCoreData().getStore()).getString(objectId);
167167

168-
if (itemFromStore != null) {
169-
var map = json.decode(itemFromStore);
170-
171-
if (map != null) {
172-
return fromJson(map);
173-
}
174-
}
168+
if (itemFromStore != null) return fromJson(json.decode(itemFromStore));
175169
}
176170
return null;
177171
}

lib/src/objects/parse_user.dart

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,13 @@ class ParseUser extends ParseObject implements ParseCloneable {
6969
client ?? ParseHTTPClient(ParseCoreData().securityContext);
7070

7171
// We can't get the current user and session without a sessionId
72-
if (token == null && ParseCoreData().sessionId == null) {
72+
if ((ParseCoreData().sessionId == null) && (token == null)) {
7373
return null;
7474
}
7575

76-
if (token == null) {
77-
token = ParseCoreData().sessionId;
76+
final Map<String, String> headers = {};
77+
if (token != null) {
78+
headers[keyHeaderSessionToken] = token;
7879
}
7980

8081
try {
@@ -85,8 +86,7 @@ class ParseUser extends ParseObject implements ParseCloneable {
8586
host: tempUri.host,
8687
path: "${tempUri.path}$keyEndPointUserName");
8788

88-
final response =
89-
await _client.get(uri, headers: {keyHeaderSessionToken: token});
89+
final response = await _client.get(uri, headers: headers);
9090
return _handleResponse(_getEmptyUser(), response, ParseApiRQ.currentUser,
9191
_debug, _getEmptyUser().className);
9292
} on Exception catch (e) {
@@ -242,9 +242,7 @@ class ParseUser extends ParseObject implements ParseCloneable {
242242
var uri = _client.data.serverUrl + "$path/$objectId";
243243
var body =
244244
json.encode(toJson(forApiRQ: true), toEncodable: dateTimeEncoder);
245-
final response = await _client.put(uri,
246-
headers: {keyHeaderSessionToken: _client.data.sessionId},
247-
body: body);
245+
final response = await _client.put(uri, body: body);
248246
return _handleResponse(
249247
this, response, ParseApiRQ.save, _debug, className);
250248
} on Exception catch (e) {
@@ -257,9 +255,8 @@ class ParseUser extends ParseObject implements ParseCloneable {
257255
Future<ParseResponse> destroy() async {
258256
if (objectId != null) {
259257
try {
260-
final response = await _client.delete(
261-
_client.data.serverUrl + "$path/$objectId",
262-
headers: {keyHeaderSessionToken: _client.data.sessionId});
258+
final response =
259+
await _client.delete(_client.data.serverUrl + "$path/$objectId");
263260
return _handleResponse(
264261
this, response, ParseApiRQ.destroy, _debug, className);
265262
} on Exception catch (e) {

0 commit comments

Comments
 (0)