From b9fe85c07fbc9f4e4d10d29f5583e1874e70d64f Mon Sep 17 00:00:00 2001 From: Keith Irwin Date: Wed, 19 Apr 2017 22:03:45 -0400 Subject: [PATCH] #52 Fixed login flash messages --- config/passport.js | 21 +++-- config/routes/auth.js | 173 ++++++++++++++++++++---------------------- server.js | 2 +- 3 files changed, 98 insertions(+), 98 deletions(-) diff --git a/config/passport.js b/config/passport.js index 897f63b..c40a98e 100644 --- a/config/passport.js +++ b/config/passport.js @@ -93,6 +93,8 @@ module.exports = (passport)=>{ user.save() .then( ()=>{ console.info(`🗂️ Lazily updated schema for ${user.name}.`); + req.session.flashType = 'success'; + req.session.flashMessage = "You have been logged in. "; return done(null, user); }) .catch( (err)=>{ @@ -103,7 +105,8 @@ module.exports = (passport)=>{ // No such user else { - req.flash('warning',`There's no user for that ${service} account. `); + req.session.flashType = 'warning'; + req.session.flashMessage = `There's no user for that ${service} account. `; return done(); } @@ -116,7 +119,8 @@ module.exports = (passport)=>{ // No googleId either else { - req.flash('warning',`There's no user for that ${service} account. `); + req.session.flashType = 'warning'; + req.session.flashMessage = `There's no user for that ${service} account. `; return done(); } } @@ -124,6 +128,8 @@ module.exports = (passport)=>{ // Successfull social login else { // console.log(`Found user: ${user}`); + req.session.flashType = 'success'; + req.session.flashMessage = "You have been logged in."; return done(null, user); } @@ -136,7 +142,7 @@ module.exports = (passport)=>{ // Intent to connect account else { - // console.log(`Connecting ${service} account...`); + // console.log(`Attempting to connect ${service} account...`); // Check for unique profileId User.findOne(query) @@ -144,7 +150,9 @@ module.exports = (passport)=>{ // Social account already in use if (existingUser) { - req.flash('warning',`Another user is already connected to that ${service} account. `); + // console.log(`${service} account already in use.`); + req.session.flashType = 'warning'; + req.session.flashMessage = `Another user is already connected to that ${service} account. `; return done(); } @@ -154,7 +162,8 @@ module.exports = (passport)=>{ req.user.auth[service] = profileId; req.user.save() .then( ()=>{ - req.flash('success', `${mw.capitalize(service)} account connected. `); + req.session.flashType = 'success'; + req.session.flashMessage = `${mw.capitalize(service)} account connected. `; return done(null,req.user); } ) .catch( (err)=>{ @@ -167,7 +176,7 @@ module.exports = (passport)=>{ .catch( (err)=>{ mw.throwErr(err,req); return done(err); - }) + }); } diff --git a/config/routes/auth.js b/config/routes/auth.js index 41a1a3b..33846fb 100644 --- a/config/routes/auth.js +++ b/config/routes/auth.js @@ -17,7 +17,9 @@ module.exports = (app, passport) => { }, loginCallback = (req,res)=>{ // console.log(`Login callback called... redirecting to ${req.session.next}`); - req.flash('success',"You have been logged in."); + req.flash(req.session.flashType,req.session.flashMessage); + req.session.flashType = undefined; + req.session.flashMessage = undefined; res.redirect( req.session.next || '/map' ); }, appLoginCallback = (req,res)=>{ @@ -84,86 +86,84 @@ module.exports = (app, passport) => { // Check if somebody already has that email User.findOne({'email':req.body.email}) - .then( (user)=>{ + .then( (user)=>{ + + // User already exists + if (user && user.auth.password) { + req.flash('warning','A user with that email already exists! If you forgot your password, you can reset it here.'); + res.redirect('/login#login'); + next(); + } + + // User exists but hasn't created a password yet + else if (user) { + // Send another token (or the same one if it hasn't expired) + sendToken(user); + } + + // Create user + else { - // User already exists - if (user && user.auth.password) { - req.flash('warning','A user with that email already exists! If you forgot your password, you can reset it here.'); - res.redirect('/login#login'); - next(); - } + user = new User(); + user.created = Date.now(); + user.email = req.body.email; + user.slug = slug(user.email.substring(0, user.email.indexOf('@'))); - // User exists but hasn't created a password yet - else if (user) { - // Send another token (or the same one if it hasn't expired) - sendToken(user); - } - - // Create user - else { - - user = new User(); - user.created = Date.now(); - user.email = req.body.email; - user.slug = slug(user.email.substring(0, user.email.indexOf('@'))); - - // Generate unique slug - let slug = new Promise((resolve,reject) => { - (function checkSlug(s,cb){ + // Generate unique slug + let slug = new Promise((resolve,reject) => { + (function checkSlug(s,cb){ + + User.findOne({slug:s}) + .then((existingUser)=>{ - User.findOne({slug:s}) - .catch((err)=>{ - mw.throwErr(err,req); - }) - .then((existingUser)=>{ - - // Slug in use: generate a random one and retry - if (existingUser){ - crypto.randomBytes(6, (err,buf)=>{ - if (err) { mw.throwErr(err,req); } - s = buf.toString('hex'); - checkSlug(s,cb); - }); - } - - // Unique slug: proceed - else { cb(s); } - - }); + // Slug in use: generate a random one and retry + if (existingUser){ + crypto.randomBytes(6, (err,buf)=>{ + if (err) { mw.throwErr(err,req); } + s = buf.toString('hex'); + checkSlug(s,cb); + }); + } - })(user.slug, (newSlug)=>{ - user.slug = newSlug; - resolve(); - }); - }); - - // Generate sk32 - let sk32 = new Promise((resolve,reject) => { - crypto.randomBytes(32, (err,buf)=>{ - if (err) { mw.throwErr(err,req); } - user.sk32 = buf.toString('hex'); - resolve(); - }); - }); - - // Save user and send the token by email - Promise.all([slug, sk32]) - .then( ()=> { - user.save(); - }).then( ()=>{ - sendToken(user); - }).catch( (err)=>{ + // Unique slug: proceed + else { cb(s); } + + }) + .catch((err)=>{ mw.throwErr(err,req); - res.redirect('/login#signup'); }); - - } + + })(user.slug, (newSlug)=>{ + user.slug = newSlug; + resolve(); + }); + }); - }) - .catch( (err)=>{ - mw.throwErr(err,req); - res.redirect('/signup'); - }); + // Generate sk32 + let sk32 = new Promise((resolve,reject) => { + crypto.randomBytes(32, (err,buf)=>{ + if (err) { mw.throwErr(err,req); } + user.sk32 = buf.toString('hex'); + resolve(); + }); + }); + + // Save user and send the token by email + Promise.all([slug, sk32]) + .then( ()=>{ user.save(); }) + .then( ()=>{ sendToken(user); }) + .catch( (err)=>{ + mw.throwErr(err,req); + res.redirect('/login#signup'); + }); + + } + + }) + .catch( (err)=>{ + mw.throwErr(err,req); + res.redirect('/signup'); + }); }); @@ -228,10 +228,10 @@ module.exports = (app, passport) => { // Android app.get('/login/app/', passport.authenticate('local'), appLoginCallback); - // Token-based - app.get(['/login/app/google','/auth/google/idtoken'], passport.authenticate('google-token'), appLoginCallback); - app.get('/login/app/facebook', passport.authenticate('facebook-token'), appLoginCallback); - app.get('/login/app/twitter', passport.authenticate('twitter-token'), appLoginCallback); + // Token-based (android social) + app.get(['/login/app/google','/auth/google/idtoken'], passport.authenticate('google-token'), appLoginCallback); + app.get('/login/app/facebook', passport.authenticate('facebook-token'), appLoginCallback); + app.get('/login/app/twitter', passport.authenticate('twitter-token'), appLoginCallback); // Social app.get('/login/:service', (req,res,next)=>{ @@ -266,17 +266,8 @@ module.exports = (app, passport) => { } }); - app.get('/login/google/cb', - passport.authenticate('google',loginOutcome), - loginCallback - ); - app.get('/login/facebook/cb', - passport.authenticate('facebook',loginOutcome), - loginCallback - ); - app.get('/login/twitter/cb', - passport.authenticate('twitter',loginOutcome), - loginCallback - ); + app.get('/login/google/cb', passport.authenticate('google',loginOutcome), loginCallback ); + app.get('/login/facebook/cb', passport.authenticate('facebook',loginOutcome), loginCallback ); + app.get('/login/twitter/cb', passport.authenticate('twitter',loginOutcome), loginCallback ); + }; - diff --git a/server.js b/server.js index afe0e3e..914f5bb 100755 --- a/server.js +++ b/server.js @@ -82,7 +82,7 @@ const // Path for redirects let nextPath = ( req.path.substring(0, req.path.indexOf('#')) || req.path ); if ( nextPath.substring(0,6)!=='/login' && nextPath.substring(0,7)!=='/logout' ){ - console.log(`Setting redirect path to "${nextPath}#"`); + // console.log(`Setting redirect path to ${nextPath}#`); req.session.next = nextPath+'#'; }