2017-02-06 5 views
0

Ich arbeite an einem einfachen sozialen Netzwerk und ich möchte, dass Benutzer sich lokal registrieren und einloggen. Ich folgte this Tutorial und der gesamte Code läuft ohne Fehler. Wenn ich mich jedoch anmelde, übergibt der Benutzer die Authentifizierung, bleibt aber nicht in der Sitzung, wenn ich req.session auf der Indexroute drucke. Hier ist meine Pass-Konfigurationsdatei:Passportjs speichert Benutzer nicht in Sitzung nach dem Login

var LocalStrategy = require('passport-local').Strategy; 
var User = require('../server/models/User.js'); 


module.exports = function(passport){ 
    passport.serializeUser(function(user, done){ 
     console.log('Serialized'); 
     done(null, user._id); 
    }); 

    passport.deserializeUser(function(id, done){ 
     console.log('Deserialized'); 
     User.findOne({id:id}, function(err, user){ 
      done(err, user); 
     }); 
    }); 

    passport.use('local-login', new LocalStrategy({ 
     usernameField:'email', 
     passwordField:'password', 
     passReqToCallback:true 
    },function(req, email, password, done){ 
     console.log('Started'); 
     User.findOne({email:email}, function(err, user){ 
      console.log('Find query'); 
      if(err){ 
       console.log('Error occured'); 
       console.error(err); 
       return done(err); 
      } 
      console.log('No error'); 
      if(!user)return done(null, false, req.flash('loginMessage', 'No user with this email found')); 
      console.log('Got user', user); 
      if(!user.validatePassword(password, user.password)){ 
       console.log('Not valid suka'); 
       return done(null, false, req.flash('loginMessage', 'Wrong password!')); 
      } 
      console.log('Valid pass'); 
      return done(null, user); 
     }); 
    })); 
} 

Das ist meine server.js Datei:

//Dependencies 
const express = require('express'); 

const passport = require('passport'); 

const session = require('express-session'); 
const cookieParser = require('cookie-parser'); 
const bodyParser = require('body-parser'); 

const flash = require('connect-flash'); 

const path = require('path'); 

const morgan = require('morgan'); 

const mongoose = require('mongoose'); 

//Mongo setup 
var mongoPath = 'mongodb://localhost:27017/party-net'; 

mongoose.connect(mongoPath, function(){ 
    console.log('Party-net database connected'); 
}); 

//Passport 
require('./config/passport.js')(passport); 

//Application setup 
var app = express(); 


//Static files 
app.use('/views', express.static(path.join(__dirname, 'public', 'views'))); 
app.use('/scripts', express.static(path.join(__dirname, 'public', 'scripts'))); 
app.use('/node_modules', express.static(path.join(__dirname, 'node_modules'))); 

//Middleware setup 
app.use(morgan('dev')); 

app.use(cookieParser()); 
app.use(bodyParser.urlencoded({extended:false})); 
app.use(bodyParser.json()); 

app.use(session({secret:'muchsecretinfomustkipithir', saveUninitialized:true, resave:true})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(flash()); 

//Routes 
const index = require('./server/routes/index.js')(app, passport); 
const api = require('./server/routes/api.js')(app, passport); 

app.listen(8080, function(){ 
    console.log('Server listening on port 8080'); 
}); 

Anmeldung Route Code:

app.post('/api/login', passport.authenticate('local-login', { 
    failureRedirect:'/' 
}), (req, res) => { 
    console.log('Login route', req.isAuthenticated(), req.session); 
    //res.sendStatus(200); 
    res.redirect('/'); 
    //res.redirect('/'+req.user.name+'/'+req.user.lastname); 
}); 

Und schließlich Kodeindex Route:

app.get('/:firstname/:lastname', isLoggedIn , (req, res) => { 
     console.log('Requested', req.user, req.isAuthenticated()); 
     res.send('Logged in successfully ' + req.params.firstname + ' ' + req.params.lastname); 
    }); 

Antwort

2

Wahrscheinlich Pass kann nicht vom Benutzer deserialisieren wie Sie verwendet haben: User.findOne({id: id}, ... aber es serialisiert von user._id so sollten Sie verwenden:

User.findOne({ _id: id }, ... 

oder findById Methode:

User.findById(id, function(err, user) { ... 
+0

Danke so sehr du mich gerettet! –

Verwandte Themen