v0.0.7 Authentication - zhentian-wan/MEANAppsFiles GitHub Wiki
We use passport for Authentication.
Install:
npm install passport passport-local --save
passport-local can deal with facebook, google, twitter auth stuff.
Create User schema
config/mongoose.js
//Users data
var userSchema = mongoose.Schema({
firstName: String,
lastName: String,
username: String
});
var User = mongoose.model('User', userSchema);
Currently, we just use username to login user, later will add password also.
Testing data
User.find({}).exec(function(err, collection){
if(_.size(collection) === 0){
User.create({firstName: 'John', lastName: 'Linquist', username: 'John'});
User.create({firstName: 'Ken', lastName: 'CD', username: 'Ken'});
User.create({firstName: 'Ben', lastName: 'Cophen', username: 'Ben'});
}
})
User.find({})
search for users in database, then we check the results, if it is empty, then we create some test data.
config/auth.js
var passport = require('passport');
exports.auth = function(req, res, next){
var auth = passport.authenticate('local', function(err, user){
// if error, pass error info to next middleware
if(err){
return next(err);
}
// if user not exists, send back login faild
if(!user){
res.send({success: false});
}
// if everything is ok, send back success message and user info
req.logIn(user, function(err){
if(err) {return next(err);}
res.send({success: true, user: user});
})
});
auth(req, res, next);
};
config/route.js
var auth = require('./auth');
app.post('/login', auth.auth);
config/express.js We need to add cookieParser, session, passport to the express.js
//cookieParser
app.use(cookieParser());
//bodyparser
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(session({secret: 'multi vision unicorns', resave:false, saveUninitialized:false}));
app.use(passport.initialize());
app.use(passport.session());
server.js
var User = mongoose.model('User');
passport.use(new LocalStrategy(
function(username, password, done){
User.findOne({username: username}).exec(function(err, user){
if(user){
return done(null, user);
}else{
return done(null, false);
}
});
}
));
passport.serializeUser(function(user, done){
if(user){
done(null, user._id);
}
});
passport.deserializeUser(function(id, done){
User.findById(id, function(err, user){
if(user){
return done(null, user);
}else{
return done(null, false);
}
})
});