Skip to content

Commit

Permalink
Merge pull request #1110 from ParsePlatform/flovilmart.missingSession…
Browse files Browse the repository at this point in the history
…InstallationId

Properly sets installationId on creating session with 3rd party auth
  • Loading branch information
flovilmart committed Mar 21, 2016
2 parents 414af99 + a31baa4 commit fb57d91
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 25 deletions.
16 changes: 12 additions & 4 deletions spec/OAuth.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -204,13 +204,11 @@ describe('OAuth', function() {
myoauth: getMockMyOauthProvider().authData
}
};
var headers = {'X-Parse-Application-Id': 'test',
'X-Parse-REST-API-Key': 'rest',
'Content-Type': 'application/json' }

var options = {
headers: {'X-Parse-Application-Id': 'test',
'X-Parse-REST-API-Key': 'rest',
'X-Parse-Installation-Id': 'yolo',
'Content-Type': 'application/json' },
url: 'http://localhost:8378/1/users',
body: JSON.stringify(jsonBody)
Expand All @@ -224,9 +222,19 @@ describe('OAuth', function() {
createOAuthUser((error, response, body) => {
expect(error).toBe(null);
var b = JSON.parse(body);
ok(b.sessionToken);
expect(b.objectId).not.toBeNull();
expect(b.objectId).not.toBeUndefined();
done();
var sessionToken = b.sessionToken;
var q = new Parse.Query("_Session");
q.equalTo('sessionToken', sessionToken);
q.first({useMasterKey: true}).then((res) => {
expect(res.get("installationId")).toEqual('yolo');
done();
}).fail((err) => {
fail('should not fail fetching the session');
done();
})
});

});
Expand Down
30 changes: 29 additions & 1 deletion spec/ParseUser.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -1768,9 +1768,37 @@ describe('Parse.User testing', () => {
});
});

it('user get session from token', (done) => {
it('user get session from token on signup', (done) => {
Parse.Promise.as().then(() => {
return Parse.User.signUp("finn", "human", { foo: "bar" });
}).then((user) => {
request.get({
headers: {
'X-Parse-Application-Id': 'test',
'X-Parse-Session-Token': user.getSessionToken(),
'X-Parse-REST-API-Key': 'rest'
},
url: 'http://localhost:8378/1/sessions/me',
}, (error, response, body) => {
expect(error).toBe(null);
var b = JSON.parse(body);
expect(typeof b.sessionToken).toEqual('string');
expect(typeof b.createdWith).toEqual('object');
expect(b.createdWith.action).toEqual('signup');
expect(typeof b.user).toEqual('object');
expect(b.user.objectId).toEqual(user.id);
done();
});
});
});

it('user get session from token on login', (done) => {
Parse.Promise.as().then(() => {
return Parse.User.signUp("finn", "human", { foo: "bar" });
}).then((user) => {
return Parse.User.logOut().then(() => {
return Parse.User.logIn("finn", "human");
})
}).then((user) => {
request.get({
headers: {
Expand Down
4 changes: 2 additions & 2 deletions src/RestWrite.js
Original file line number Diff line number Diff line change
Expand Up @@ -327,11 +327,11 @@ RestWrite.prototype.transformUser = function() {
objectId: this.objectId()
},
createdWith: {
'action': 'login',
'action': 'signup',
'authProvider': this.storage['authProvider'] || 'password'
},
restricted: false,
installationId: this.data.installationId,
installationId: this.auth.installationId,
expiresAt: Parse._encode(expiresAt)
};
if (this.response && this.response.response) {
Expand Down
22 changes: 6 additions & 16 deletions src/Routers/UsersRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,7 @@ export class UsersRouter extends ClassesRouter {
req.body = data;
req.params.className = '_User';

//req.config.userController.setEmailVerifyToken(req.body);

return super.handleCreate(req);

// if (req.config.verifyUserEmails) {
// // Send email as fire-and-forget once the user makes it into the DB.
// p.then(() => {
// req.config.userController.sendVerificationEmail(req.body);
// });
// }
// return p;
}

handleUpdate(req) {
Expand Down Expand Up @@ -102,9 +92,9 @@ export class UsersRouter extends ClassesRouter {
let token = 'r:' + cryptoUtils.newToken();
user.sessionToken = token;
delete user.password;

// Sometimes the authData still has null on that keys
// https://github.com/ParsePlatform/parse-server/issues/935
// https://github.com/ParsePlatform/parse-server/issues/935
if (user.authData) {
Object.keys(user.authData).forEach((provider) => {
if (user.authData[provider] === null) {
Expand All @@ -115,7 +105,7 @@ export class UsersRouter extends ClassesRouter {
delete user.authData;
}
}

req.config.filesController.expandFilesInObject(req.config, user);

let expiresAt = new Date();
Expand Down Expand Up @@ -165,14 +155,14 @@ export class UsersRouter extends ClassesRouter {
}
return Promise.resolve(success);
}

handleResetRequest(req) {
let { email } = req.body;
if (!email) {
throw new Parse.Error(Parse.Error.EMAIL_MISSING, "you must provide an email");
}
let userController = req.config.userController;

return userController.sendPasswordResetEmail(email).then((token) => {
return Promise.resolve({
response: {}
Expand All @@ -181,7 +171,7 @@ export class UsersRouter extends ClassesRouter {
throw new Parse.Error(Parse.Error.EMAIL_NOT_FOUND, `no user found with email ${email}`);
});
}


mountRoutes() {
this.route('GET', '/users', req => { return this.handleFind(req); });
Expand Down
4 changes: 2 additions & 2 deletions src/middlewares.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ function handleParseHeaders(req, res, next) {
// Client keys are not required in parse-server, but if any have been configured in the server, validate them
// to preserve original behavior.
let keys = ["clientKey", "javascriptKey", "dotNetKey", "restAPIKey"];

// We do it with mismatching keys to support no-keys config
var keyMismatch = keys.reduce(function(mismatch, key){

Expand All @@ -107,7 +107,7 @@ function handleParseHeaders(req, res, next) {
}
return mismatch;
}, 0);

// All keys mismatch
if (keyMismatch == keys.length) {
return invalidRequest(req, res);
Expand Down

0 comments on commit fb57d91

Please sign in to comment.