sqlite - passportjs local-strategy cant get route -
been wrestling problem 2 days :) appreciate help.
i'm trying build express authentication passportjs+sqlite+sequelize,
1)when put routes above app.use(passport.session())
login doesn't work
2) when put routes below passport.session app cant route
app.js --- normal includes app.use(cookieparser()); app.use(session({ secret: 'ilovescotchscotchyscotchscotch', resave: true, saveuninitialized: true })); var passport = require('passport'); app.use(passport.initialize()); app.use(passport.session()); var router = require('./routes/index')(passport); app.use('/', router); var initpassport = require('./passp.js'); initpassport(passport);
passport file
// load things need var localstrategy = require('passport-local').strategy; // expose function our app using module.exports module.exports = function(passport) { var user = require('./dbcon.js'); passport.serializeuser(function(user, done) { done(null, user.datavalues.id); }); // used deserialize user passport.deserializeuser(function(id, done) { user.findone({where : {id : id}}).then(function(user) { done(null, user); }).catch(function(err){ console.log(err) }); }); passport.use('local-signup', new localstrategy({ // default, local strategy uses username , password, override email usernamefield : 'email', passwordfield : 'password', passreqtocallback : true // allows pass entire request callback }, function(req, email, password, done) { user.findone({where : {username : email } }) .then(function(user){ if(user === null) { user.create({ username : email, password : password }).then(function(user){ done(null, user); }).catch(function(err){ console.log(err) }) } else{ done(null, false); } }).catch(function(err){ console.log(err) }) } )) passport.use('local-login', new localstrategy({ // default, local strategy uses username , password, override email usernamefield : 'email', passwordfield : 'password', passreqtocallback : true // allows pass entire request callback }, function(req, email, password, done) { // callback email , password our form return user.findone({where : {username : email } }) .then(function (user) { if(user === null) done(null, true) if(user.datavalues.password === password) done(null, user) else{ done(null, true) } }) }) ) };
route file
module.exports = function(passport){ router.get('/', function(req, res, next) { res.render('index', { title: 'express' }); }); router.get('/error', function(req, res, next) { res.render('error', { title: 'express' }); }); router.get('/admin', function(req, res, next) { res.render('admin', { title: 'express' }); }); router.post('/signup', function(req, res, next) { passport.authenticate('local-signup', function(err, user, info) { if (err) { return next(err); } // redirect if fails if (!user) { return res.redirect('/'); } req.login(user, function(err) { if (err) { return next(err); } // redirect if succeeds return res.render('admin'); }); })(req, res, next); }); router.post('/login', function(req, res, next) { passport.authenticate('local-login', function(err, user, info) { if (err) { return next(err); } // redirect if fails if (!user) { return res.redirect('/'); } req.login(user, function(err) { if (err) { return next(err); } // redirect if succeeds return res.render('admin'); }); })(req, res, next); }); return router
} please me! thanks!
.then()
recieve result first parameter, not error
try it:
// used deserialize user passport.deserializeuser(function(id, done) { user.findone({where : {id : id}}) .then(function(user) { done(null, user); }) .catch(function(err){ done(err, null); }); });
Comments
Post a Comment