Skip to content

Instantly share code, notes, and snippets.

@royhowie
Last active August 29, 2015 14:23
Show Gist options
  • Save royhowie/acc667a21705ca6bde90 to your computer and use it in GitHub Desktop.
Save royhowie/acc667a21705ca6bde90 to your computer and use it in GitHub Desktop.
why promises are great
import User from '../models/user'
import { userQueries } from './queries'
let LocalStrategy = require('passport-local').Strategy
export default function (passport) {
passport.serializeUser(serializeUser)
passport.deserializeUser(deserializeUser)
passport.use('register', getStrategy(register))
passport.use('login', getStrategy(login))
}
function deserializeUser (id, done) {
User.findById(id, done)
}
function getStrategy (done) {
return new LocalStrategy({
usernameField : 'email'
, passwordField : 'password'
, passReqToCallback : true
}, done)
}
function login (req, email, password, done) {
userQueries.findBy.email(email)
.then((user) => {
if (!user) {
throw new Error('User not found in database.')
} else {
return user.validPassword(password)
}
}).then((state) => {
if (state.correctPassword) {
return Promise.resolve(state.user)
} else {
throw new Error('Oops! Wrong password.')
}
}).then((user) => {
return done(null, user)
}).catch((err) => {
return done(null, false, req.flash('message', err.message || err))
})
}
function register (req, email, password, done) {
userQueries.findBy.email(email)
.then((user) => {
if (user) {
throw new Error('That email is already in use.')
} else if (email.indexOf('@') === -1) {
throw new Error('Invalid email.')
} else {
return new User().setUp(email, password).save()
}
}).then((newUser) => {
return done(null, newUser)
}).catch((err) => {
return done(null, false, req.flash('message', err.message || err))
})
}
function serializeUser (user, done) {
done(null, user._id)
}
import User from '../models/user'
let LocalStrategy = require("passport-local").Strategy
export default function (passport) {
passport.serializeUser(serializeUser)
passport.deserializeUser(deserializeUser)
passport.use("register", getStrategy(register))
passport.use("login", getStrategy(login))
}
function deserializeUser (id, done) {
User.findById(id, done)
}
function getStrategy (done) {
return new LocalStrategy({
usernameField : "email"
, passwordField : "password"
, passReqToCallback : true
}, done)
}
function login (req, email, password, done) {
User.findOne({ "email" : email.toLowerCase().trim() }, function (err, user) {
if (err) {
return done(err)
} else if (!user) {
return done(null, false, req.flash("message", "User not found in database."))
} else {
user.validPassword(password, function (err, correct) {
if (err) {
return done(null, false, req.flash("message", err))
} else if (!correct) {
return done(null, false, req.flash("message", "Oops! Wrong password."))
} else {
return done(null, user)
}
})
}
})
}
function register (req, email, password, done) {
email = email.trim().toLowerCase()
User.findOne({ "email" : email }, function (err, user) {
if (err) {
return done(err)
} else if (user) {
return done(null, false, req.flash("message", "That email is already in use."))
} else if (email.indexOf("@") < 0) {
return done(null, false, req.flash("message", "Not a valid email address."))
} else {
let newUser = new User()
newUser.setUp(email, password, function (err) {
if (err) {
return done(err, false, req.flash("Something went wrong with your request. Please try again."))
} else {
newUser.save(function (err) {
if (err) {
return done(null, false, req.flash("message", "Something went wrong. Please try again."))
} else {
return done(err, newUser, req.flash("message", err))
}
})
}
})
}
})
}
function serializeUser (user, done) {
done(null, user._id)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment