2017-02-06 1 views
0

간단한 소셜 네트워크에서 작업하고 있으며 사용자가 passport.js를 사용하여 로컬로 등록하고 로그인하기를 원합니다. 나는 this 튜토리얼을 따르고 있으며 모든 코드는 오류없이 실행됩니다. 그러나 로그인하려고하면 사용자가 인증을 통과하지만 인덱스 경로에 req.session을 인쇄하면 세션에 남아 있지 않습니다. 이건 내 server.js 파일이Passportjs가 로그인 후 세션에 사용자를 저장하지 않음

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); 
     }); 
    })); 
} 

입니다 : 여기 내 여권 설정 파일입니다

//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'); 
}); 

로그인 경로 코드 :

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); 
}); 

그리고 마지막으로 인덱스 경로 코드 :

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); 
    }); 

답변

2

아마도 여권 당신이 사용했던 같은 사용자를 역 직렬화 할 수 없습니다 User.findOne({id: id}, ...을하지만 user._id하여 직렬화 그래서 당신은 사용해야

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

또는 findById이 방법

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

감사합니다 순전히 당신이 저를 저장! –

관련 문제