2017-02-06 3 views
0

Я работаю над простой социальной сетью, и я хочу, чтобы пользователи регистрировались и регистрировались локально через паспорт. Js. Я следовал this учебному курсу, и весь код работает без ошибок. Однако, когда я пытаюсь войти в систему, пользователь проходит аутентификацию, но не остается в сеансе, когда я печатаю req.session по указательному маршруту. Вот мой паспорт конфигурационный файл: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); 
     }); 
    })); 
} 

Это мой server.js файл:

//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

Спасибо так много ты спас меня! –

Смежные вопросы