From dd0dbd713819d2968633a570f9606f5d70c28224 Mon Sep 17 00:00:00 2001 From: Sahat Yalkabov Date: Tue, 19 Nov 2013 01:57:13 -0500 Subject: [PATCH] fixed repeated login error, no longer throws duplicate user error --- config/passport.js | 32 +++++++++++++++++--------------- models/user.js | 19 ++++++++++++++++--- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/config/passport.js b/config/passport.js index ed4b2f45b5..f1fb8bf239 100755 --- a/config/passport.js +++ b/config/passport.js @@ -39,21 +39,23 @@ passport.use(new FacebookStrategy({ callbackURL: config.facebook.callbackUrl || "http://localhost:8000/auth/facebook/callback" }, function (accessToken, refreshToken, profile, done) { - User.findOne({ $where: profile.provider + '==' + profile.id }, function(err, existingUser) { - if (existingUser) { - done(null, existingUser); - } else { - var user = new User({ - firstName: profile.name.givenName, - lastName: profile.name.familyName, - provider: profile.provider - }); - user[profile.provider] = profile.id; - user.save(function(err) { - if (err) throw err; - done(null, user); - }); - } + console.log(profile.provider); + console.log(profile.id); + User.findOne({ facebook: profile.id }, function(err, existingUser) { + console.log(err); + console.log(existingUser); + if (existingUser) return done(null, existingUser); + var user = new User({ + firstName: profile.name.givenName, + lastName: profile.name.familyName, + provider: profile.provider + }); + user[profile.provider] = profile.id; + + user.save(function(err) { + if (err) throw err; + done(null, user); + }); }); } diff --git a/models/user.js b/models/user.js index ff9bdb25cc..f9c10331ec 100644 --- a/models/user.js +++ b/models/user.js @@ -2,13 +2,26 @@ var mongoose = require('mongoose'), bcrypt = require('bcrypt'); var userSchema = new mongoose.Schema({ + email: { type: String, unique: true }, firstName: { type: String, required: true}, lastName: { type: String, required: true}, - email: { type: String, required: true, unique: true }, - password: { type: String, required: true}, - admin: { type: Boolean, default: false } + password: String, + admin: { type: Boolean, default: false }, + provider: String, + facebook: String, + google: String }); +userSchema.path('password').validate(function(password) { + if (this.provider) return true; + return password.length; +}, 'Password cannot be blank'); + +userSchema.path('email').validate(function(email) { + if (this.provider) return true; + return email.length; +}, 'Email cannot be blank'); + userSchema.pre('save', function(next) { var user = this; var SALT_FACTOR = 5;