Monday 18 April 2016

Passport, '/profile' isn't playing nice

var express = require('express'); var app = express(); var mongoose = require('mongoose'); var passport = require('passport'); var passportLocal = require('passport-local').Strategy; var bodyParser = require('body-parser'); var cookieParser = require('cookie-parser'); var session = require('express-session');var userSchema = mongoose.Schema({ local: { email: String, password: String } }); var User = mongoose.model('User',userSchema); app.use(session({secret: "imasecret"})); app.use(passport.initialize()); app.use(passport.session()); app.use(cookieParser()); app.use(bodyParser());mongoose.connect('mongodb://localhost/passport'); var connection = mongoose.connection; connection.on('error',console.error.bind(console, 'Connection Error: ')); connection.once('open',function(callback){ console.log("mongoose connected!"); });app.listen(3000); console.log("Magic on port 3000");//serialize users by there ID passport.serializeUser(function(user,done){ console.log("user serialized", user); done(user.id); }); //Find the user by there id, and deserialize the user passport.deserializeUser(function(id,done){ User.findById(id,function(err,user){ console.log("user deserialized", user); done(err,user); }); }); //signup passport-local configuration passport.use('local-signup', new passportLocal({ //The config usernameField: "email", passwordField: "password", passReqToCallback: true },function(req,email,password,done){ // asynchronous // User.findOne wont fire unless data is sent back process.nextTick(function(){ User.findOne({"local.email": email},function(err,user){ if(err) return done(err); if(user){ return done(null,false,null); }else{ var newUser = new User(); newUser.local.email = email; newUser.local.password = password; newUser.save(function(err){ if(err) throw err; return done(null,newUser); }); } }); }); }));passport.use('local-login',new passportLocal({ usernameField: 'email', passwordField: 'password', passReqToCallback: true },function(req,email,password,done){ User.findOne({'local.email': email },function(err,user){ console.log("user:",user); if(err) return done(err); if(!user) return done(null,false); if(user.local.password !== password) return done(null,false); console.log("DONEE"); return done(null,user); }); }));//routes app.get('/profile',isLoggedIn,function(req,res){ res.status(200).send({message: "wohooo you did iiiiit!", user: req.user}); }); app.post('/signup',passport.authenticate('local-signup', { successRedirect: '/profile', failureRedirect: '/signup', failureFlash : false })); app.post('/login', passport.authenticate('local-login', { successRedirect : '/profile', // redirect to the secure profile section failureRedirect : '/login', // redirect back to the signup page if there is an error failureFlash : false }));// route middleware to make sure a user is logged in function isLoggedIn(req, res, next) { // if user is authenticated in the session, carry on if (req.isAuthenticated()){ console.log("authenticated!!"); return next(); } // if they aren't redirect them to the home page res.redirect('/'); }I can NOT get /profile to work! it has a problem with the 'isLoggedIn' function (it isnt 'authenticated', but it is in the DB, and it is serialized correctly)

Submitted April 18, 2016 at 03:51PM by ThomasSmWatson

No comments:

Post a Comment