@@ -238,6 +238,129 @@ describe("Custom Pages, Email Verification, Password Reset", () => {
238
238
} ) ;
239
239
} ) ;
240
240
241
+ it_exclude_dbs ( [ 'postgres' ] ) ( 'prevents user from login if email is not verified but preventLoginWithUnverifiedEmail is set to true' , done => {
242
+ reconfigureServer ( {
243
+ appName : 'test' ,
244
+ publicServerURL : 'http://localhost:1337/1' ,
245
+ verifyUserEmails : true ,
246
+ preventLoginWithUnverifiedEmail : true ,
247
+ emailAdapter : MockEmailAdapterWithOptions ( {
248
+
249
+ apiKey : 'k' ,
250
+ domain : 'd' ,
251
+ } ) ,
252
+ } )
253
+ . then ( ( ) => {
254
+ let user = new Parse . User ( ) ;
255
+ user . setPassword ( "asdf" ) ;
256
+ user . setUsername ( "zxcv" ) ;
257
+ user . set ( "email" , "[email protected] " ) ;
258
+ user . signUp ( null )
259
+ . then ( user => Parse . User . logIn ( "zxcv" , "asdf" ) )
260
+ . then ( result => {
261
+ fail ( 'login should have failed' ) ;
262
+ done ( ) ;
263
+ } , error => {
264
+ expect ( error . message ) . toEqual ( 'User email is not verified.' )
265
+ done ( ) ;
266
+ } ) ;
267
+ } )
268
+ . catch ( error => {
269
+ fail ( JSON . stringify ( error ) ) ;
270
+ done ( ) ;
271
+ } ) ;
272
+ } ) ;
273
+
274
+ it_exclude_dbs ( [ 'postgres' ] ) ( 'allows user to login only after user clicks on the link to confirm email address if preventLoginWithUnverifiedEmail is set to true' , done => {
275
+ var user = new Parse . User ( ) ;
276
+ var sendEmailOptions ;
277
+ var emailAdapter = {
278
+ sendVerificationEmail : options => {
279
+ sendEmailOptions = options ;
280
+ } ,
281
+ sendPasswordResetEmail : ( ) => Promise . resolve ( ) ,
282
+ sendMail : ( ) => { }
283
+ }
284
+ reconfigureServer ( {
285
+ appName : 'emailing app' ,
286
+ verifyUserEmails : true ,
287
+ preventLoginWithUnverifiedEmail : true ,
288
+ emailAdapter : emailAdapter ,
289
+ publicServerURL : "http://localhost:8378/1"
290
+ } )
291
+ . then ( ( ) => {
292
+ user . setPassword ( "other-password" ) ;
293
+ user . setUsername ( "user" ) ;
294
+ user . set ( 'email' , '[email protected] ' ) ;
295
+ return user . signUp ( ) ;
296
+ } ) . then ( ( ) => {
297
+ expect ( sendEmailOptions ) . not . toBeUndefined ( ) ;
298
+ request . get ( sendEmailOptions . link , {
299
+ followRedirect : false ,
300
+ } , ( error , response , body ) => {
301
+ expect ( response . statusCode ) . toEqual ( 302 ) ;
302
+ expect ( response . body ) . toEqual ( 'Found. Redirecting to http://localhost:8378/1/apps/verify_email_success.html?username=user' ) ;
303
+ user . fetch ( )
304
+ . then ( ( ) => {
305
+ expect ( user . get ( 'emailVerified' ) ) . toEqual ( true ) ;
306
+
307
+ Parse . User . logIn ( "user" , "other-password" )
308
+ . then ( user => {
309
+ expect ( typeof user ) . toBe ( 'object' ) ;
310
+ expect ( user . get ( 'emailVerified' ) ) . toBe ( true ) ;
311
+ done ( ) ;
312
+ } , error => {
313
+ fail ( 'login should have succeeded' ) ;
314
+ done ( ) ;
315
+ } ) ;
316
+ } , ( err ) => {
317
+ console . error ( err ) ;
318
+ fail ( "this should not fail" ) ;
319
+ done ( ) ;
320
+ } ) . catch ( ( err ) =>
321
+ {
322
+ console . error ( err ) ;
323
+ fail ( err ) ;
324
+ done ( ) ;
325
+ } )
326
+ } ) ;
327
+ } ) ;
328
+ } ) ;
329
+
330
+ it_exclude_dbs ( [ 'postgres' ] ) ( 'allows user to login if email is not verified but preventLoginWithUnverifiedEmail is set to false' , done => {
331
+ reconfigureServer ( {
332
+ appName : 'test' ,
333
+ publicServerURL : 'http://localhost:1337/1' ,
334
+ verifyUserEmails : true ,
335
+ preventLoginWithUnverifiedEmail : false ,
336
+ emailAdapter : MockEmailAdapterWithOptions ( {
337
+
338
+ apiKey : 'k' ,
339
+ domain : 'd' ,
340
+ } ) ,
341
+ } )
342
+ . then ( ( ) => {
343
+ let user = new Parse . User ( ) ;
344
+ user . setPassword ( "asdf" ) ;
345
+ user . setUsername ( "zxcv" ) ;
346
+ user . set ( "email" , "[email protected] " ) ;
347
+ user . signUp ( null )
348
+ . then ( user => Parse . User . logIn ( "zxcv" , "asdf" ) )
349
+ . then ( user => {
350
+ expect ( typeof user ) . toBe ( 'object' ) ;
351
+ expect ( user . get ( 'emailVerified' ) ) . toBe ( false ) ;
352
+ done ( ) ;
353
+ } , error => {
354
+ fail ( 'login should have succeeded' ) ;
355
+ done ( ) ;
356
+ } ) ;
357
+ } )
358
+ . catch ( error => {
359
+ fail ( JSON . stringify ( error ) ) ;
360
+ done ( ) ;
361
+ } ) ;
362
+ } ) ;
363
+
241
364
it_exclude_dbs ( [ 'postgres' ] ) ( 'fails if you include an emailAdapter, set a publicServerURL, but have no appName and send a password reset email' , done => {
242
365
reconfigureServer ( {
243
366
appName : undefined ,
0 commit comments