Skip to content

Commit 84896db

Browse files
authored
Set objectId into query for Email Validation (#6930)
* Retrieve user concerned by email verification and ser objectId into query * Linter ok * Testing live query fired when email validation done * Setting objectId into query if user exists * Setting objectId into query if user exists
1 parent af8c9ff commit 84896db

File tree

2 files changed

+65
-5
lines changed

2 files changed

+65
-5
lines changed

spec/ParseLiveQuery.spec.js

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict';
2-
2+
const UserController = require('../lib/Controllers/UserController')
3+
.UserController;
4+
const Config = require('../lib/Config');
35
describe('ParseLiveQuery', function () {
46
it('can subscribe to query', async done => {
57
await reconfigureServer({
@@ -241,6 +243,62 @@ describe('ParseLiveQuery', function () {
241243
}, 1000);
242244
});
243245

246+
it('should execute live query update on email validation', async done => {
247+
const emailAdapter = {
248+
sendVerificationEmail: () => {},
249+
sendPasswordResetEmail: () => Promise.resolve(),
250+
sendMail: () => {},
251+
};
252+
253+
await reconfigureServer({
254+
liveQuery: {
255+
classNames: ['_User'],
256+
},
257+
startLiveQueryServer: true,
258+
verbose: false,
259+
silent: true,
260+
websocketTimeout: 100,
261+
appName: 'liveQueryEmailValidation',
262+
verifyUserEmails: true,
263+
emailAdapter: emailAdapter,
264+
emailVerifyTokenValidityDuration: 20, // 0.5 second
265+
publicServerURL: 'http://localhost:8378/1',
266+
}).then(() => {
267+
const user = new Parse.User();
268+
user.set('password', 'asdf');
269+
user.set('email', '[email protected]');
270+
user.set('username', 'zxcv');
271+
user
272+
.signUp()
273+
.then(() => {
274+
const config = Config.get('test');
275+
return config.database.find('_User', {
276+
username: 'zxcv',
277+
});
278+
})
279+
.then(async results => {
280+
const foundUser = results[0];
281+
const query = new Parse.Query('_User');
282+
query.equalTo('objectId', foundUser.objectId);
283+
const subscription = await query.subscribe();
284+
285+
subscription.on('update', async object => {
286+
expect(object).toBeDefined();
287+
expect(object.get('emailVerified')).toBe(true);
288+
done();
289+
});
290+
291+
const userController = new UserController(emailAdapter, 'test', {
292+
verifyUserEmails: true,
293+
});
294+
userController.verifyEmail(
295+
foundUser.username,
296+
foundUser._email_verify_token
297+
);
298+
});
299+
});
300+
});
301+
244302
afterEach(async function (done) {
245303
const client = await Parse.CoreManager.getLiveQueryController().getDefaultLiveQueryClient();
246304
client.close();

src/Controllers/UserController.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,17 @@ export class UserController extends AdaptableController {
6464
updateFields._email_verify_token_expires_at = { __op: 'Delete' };
6565
}
6666
const masterAuth = Auth.master(this.config);
67-
var checkIfAlreadyVerified = new RestQuery(
67+
var findUserForEmailVerification = new RestQuery(
6868
this.config,
6969
Auth.master(this.config),
7070
'_User',
71-
{ username: username, emailVerified: true }
71+
{ username: username }
7272
);
73-
return checkIfAlreadyVerified.execute().then(result => {
74-
if (result.results.length) {
73+
return findUserForEmailVerification.execute().then(result => {
74+
if (result.results.length && result.results[0].emailVerified) {
7575
return Promise.resolve(result.results.length[0]);
76+
} else if (result.results.length) {
77+
query.objectId = result.results[0].objectId;
7678
}
7779
return rest.update(this.config, masterAuth, '_User', query, updateFields);
7880
});

0 commit comments

Comments
 (0)