From 9179c1ee060903310d5aaa2e4f24cb68fd644431 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Mon, 1 Dec 2014 21:13:39 -0800 Subject: [PATCH] make all oauth options flexible --- config/passport.js | 66 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/config/passport.js b/config/passport.js index 4c32ecd99e..5f11c4aae5 100644 --- a/config/passport.js +++ b/config/passport.js @@ -106,10 +106,21 @@ passport.use(new LinkedInStrategy(secrets.linkedin, function(req, accessToken, r User.findOne({ linkedin: profile.id }, function(err, existingUser) { if (existingUser) return done(null, existingUser); User.findOne({ email: profile._json.emailAddress }, function(err, existingEmailUser) { - //if (existingEmailUser) { + if (existingEmailUser) { // req.flash('errors', { msg: 'There is already an account using this email address. Sign in to that account and link it with LinkedIn manually from Account Settings.' }); // done(err); - //} else { + var user = existingEmailUser; + user.linkedin = profile.id; + user.tokens.push({ kind: 'linkedin', accessToken: accessToken }); + user.email = profile._json.emailAddress; + user.profile.name = profile.displayName; + user.profile.location = profile._json.location.name; + user.profile.picture = profile._json.pictureUrl; + user.profile.website = profile._json.publicProfileUrl; + user.save(function(err) { + done(err, user); + }); + } else { var user = new User(); user.linkedin = profile.id; user.tokens.push({ kind: 'linkedin', accessToken: accessToken }); @@ -121,7 +132,7 @@ passport.use(new LinkedInStrategy(secrets.linkedin, function(req, accessToken, r user.save(function(err) { done(err, user); }); - //} + } }); }); } @@ -205,10 +216,10 @@ passport.use(new FacebookStrategy(secrets.facebook, function(req, accessToken, r passport.use(new GitHubStrategy(secrets.github, function(req, accessToken, refreshToken, profile, done) { if (req.user) { User.findOne({ github: profile.id }, function(err, existingUser) { - if (existingUser) { - req.flash('errors', { msg: 'There is already a GitHub account that belongs to you. Sign in with that account or delete it, then link it with your current account.' }); - done(err); - } else { + //if (existingUser) { + // req.flash('errors', { msg: 'There is already a GitHub account that belongs to you. Sign in with that account or delete it, then link it with your current account.' }); + // done(err); + //} else { User.findById(req.user.id, function(err, user) { user.github = profile.id; user.tokens.push({ kind: 'github', accessToken: accessToken }); @@ -221,15 +232,26 @@ passport.use(new GitHubStrategy(secrets.github, function(req, accessToken, refre done(err, user); }); }); - } + //} }); } else { User.findOne({ github: profile.id }, function(err, existingUser) { if (existingUser) return done(null, existingUser); User.findOne({ email: profile._json.email }, function(err, existingEmailUser) { if (existingEmailUser) { - req.flash('errors', { msg: 'There is already an account using this email address. Sign in to that account and link it with GitHub manually from Account Settings.' }); - done(err); + //req.flash('errors', { msg: 'There is already an account using this email address. Sign in to that account and link it with GitHub manually from Account Settings.' }); + //done(err); + var user = existingEmailUser; + user.email = profile._json.email; + user.github = profile.id; + user.tokens.push({ kind: 'github', accessToken: accessToken }); + user.profile.name = profile.displayName; + user.profile.picture = profile._json.avatar_url; + user.profile.location = profile._json.location; + user.profile.website = profile._json.blog; + user.save(function(err) { + done(err, user); + }); } else { var user = new User(); user.email = profile._json.email; @@ -254,10 +276,10 @@ passport.use(new GitHubStrategy(secrets.github, function(req, accessToken, refre passport.use(new GoogleStrategy(secrets.google, function(req, accessToken, refreshToken, profile, done) { if (req.user) { User.findOne({ google: profile.id }, function(err, existingUser) { - if (existingUser) { - req.flash('errors', { msg: 'There is already a Google account that belongs to you. Sign in with that account or delete it, then link it with your current account.' }); - done(err); - } else { + //if (existingUser) { + // req.flash('errors', { msg: 'There is already a Google account that belongs to you. Sign in with that account or delete it, then link it with your current account.' }); + // done(err); + //} else { User.findById(req.user.id, function(err, user) { user.google = profile.id; user.tokens.push({ kind: 'google', accessToken: accessToken }); @@ -269,15 +291,25 @@ passport.use(new GoogleStrategy(secrets.google, function(req, accessToken, refre done(err, user); }); }); - } + //} }); } else { User.findOne({ google: profile.id }, function(err, existingUser) { if (existingUser) return done(null, existingUser); User.findOne({ email: profile._json.email }, function(err, existingEmailUser) { if (existingEmailUser) { - req.flash('errors', { msg: 'There is already an account using this email address. Sign in to that account and link it with Google manually from Account Settings.' }); - done(err); + //req.flash('errors', { msg: 'There is already an account using this email address. Sign in to that account and link it with Google manually from Account Settings.' }); + //done(err); + var user = existingEmailUser; + user.email = profile._json.email; + user.google = profile.id; + user.tokens.push({ kind: 'google', accessToken: accessToken }); + user.profile.name = profile.displayName; + user.profile.gender = profile._json.gender; + user.profile.picture = profile._json.picture; + user.save(function(err) { + done(err, user); + }); } else { var user = new User(); user.email = profile._json.email;