Fixed Login passport configuration, plus code refactoring and cleanup

This commit is contained in:
Sahat Yalkabov
2013-11-18 17:37:50 -05:00
parent bdfec9f914
commit 01f027430b
6 changed files with 47 additions and 32 deletions

10
app.js
View File

@ -8,11 +8,10 @@ var express = require('express'),
// Configuration (API Keys, Database URI) // Configuration (API Keys, Database URI)
var config = require('./config.json'); var config = require('./config.json');
var passportConf = require('./config/passport');
// Load controllers // Load controllers
var home = require('./controllers/home'), var home = require('./controllers/home'),
api = require('./controllers/api'),
auth = require('./controllers/auth'),
user = require('./controllers/user'); user = require('./controllers/user');
// Connect to database // Connect to database
@ -41,17 +40,16 @@ app.use(app.router);
app.get('/', home.index); app.get('/', home.index);
app.get('/login', user.getLogin); app.get('/login', user.getLogin);
app.post('/login', user.postlogin); app.post('/login', user.postLogin);
app.get('/logout', user.logout); app.get('/logout', user.logout);
app.get('/signup', user.getSignup); app.get('/signup', user.getSignup);
app.post('/signup', user.postSignup); app.post('/signup', user.postSignup);
app.get('/account', auth.ensureAuthenticated, user.account); app.get('/account', passportConf.ensureAuthenticated, user.account);
app.get('/admin', auth.ensureAuthenticated, auth.ensureAdmin(), user.admin); app.get('/admin', passportConf.ensureAuthenticated, passportConf.ensureAdmin(), user.admin);
app.get('/api/name', api.name);
app.get('/partials/:name', home.partials); app.get('/partials/:name', home.partials);
app.get('*', home.index); app.get('*', home.index);

View File

@ -1,6 +1,6 @@
var passport = require('passport'), var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy, LocalStrategy = require('passport-local').Strategy,
User = require('../models/user'); User = require('../models/User');
passport.serializeUser(function(user, done) { passport.serializeUser(function(user, done) {
done(null, user.id); done(null, user.id);
@ -12,10 +12,10 @@ passport.deserializeUser(function(id, done) {
}); });
}); });
passport.use(new LocalStrategy(function(username, password, done) { passport.use(new LocalStrategy({ usernameField: 'email' },function(email, password, done) {
User.findOne({ username: username }, function(err, user) { User.findOne({ email: email }, function(err, user) {
if (err) { return done(err); } if (err) { return done(err); }
if (!user) { return done(null, false, { message: 'Unknown user ' + username }); } if (!user) { return done(null, false, { message: 'Unknown user ' + email }); }
user.comparePassword(password, function(err, isMatch) { user.comparePassword(password, function(err, isMatch) {
if (err) return done(err); if (err) return done(err);
if(isMatch) { if(isMatch) {

View File

@ -1,5 +0,0 @@
exports.name = function (req, res) {
res.json({
name: 'Bob'
});
};

View File

@ -2,12 +2,14 @@ var mongoose = require('mongoose'),
passport = require('passport'); passport = require('passport');
// Import models // Import models
var User = require('../models/user');
exports.account = function(req, res) { exports.account = function(req, res) {
res.render('account', { user: req.user }); res.render('account', { user: req.user });
}; };
/**
* GET /login
*/
exports.getLogin = function(req, res) { exports.getLogin = function(req, res) {
res.render('login', { res.render('login', {
title: 'Login', title: 'Login',
@ -16,6 +18,29 @@ exports.getLogin = function(req, res) {
}); });
}; };
/**
* POST /login
*/
exports.postLogin = function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) {
console.log(err);
return next(err);
}
if (!user) {
req.flash('message', [info.message]);
return res.redirect('/login');
}
req.logIn(user, function(err) {
if (err) return next(err);
return res.redirect('/');
});
})(req, res, next);
};
/**
* GET /signup
*/
exports.getSignup = function(req, res) { exports.getSignup = function(req, res) {
res.render('signup', { res.render('signup', {
title: 'Create Account', title: 'Create Account',
@ -24,6 +49,9 @@ exports.getSignup = function(req, res) {
}); });
}; };
/**
* POST /signup
*/
exports.postSignup = function(req, res) { exports.postSignup = function(req, res) {
var user = new User({ var user = new User({
@ -48,24 +76,16 @@ exports.postSignup = function(req, res) {
}); });
}; };
/**
* GET /admin
*/
exports.admin = function(req, res) { exports.admin = function(req, res) {
res.send('access granted admin!'); res.send('access granted admin!');
}; };
exports.postlogin = function(req, res, next) { /**
passport.authenticate('local', function(err, user, info) { * GET /logout
if (err) return next(err); */
if (!user) {
req.flash('messages', [info.message]);
return res.redirect('/login');
}
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/');
});
})(req, res, next);
};
exports.logout = function(req, res) { exports.logout = function(req, res) {
req.logout(); req.logout();
res.redirect('/'); res.redirect('/');

View File

@ -1,7 +1,6 @@
var mongoose = require('mongoose'), var mongoose = require('mongoose'),
bcrypt = require('bcrypt'); bcrypt = require('bcrypt');
var userSchema = new mongoose.Schema({ var userSchema = new mongoose.Schema({
firstName: { type: String, required: true}, firstName: { type: String, required: true},
lastName: { type: String, required: true}, lastName: { type: String, required: true},

View File

@ -6,4 +6,7 @@ block content
p.lead p.lead
| Use this document as a way to quickly start any new project. | Use this document as a way to quickly start any new project.
br br
| All you get is this text and a mostly barebones HTML document. | All you get is this text and a mostly barebones HTML document.
if user
.alert.alert-success Congratulations, you are logged in!