2015-11-26 5 views
0

Я пытаюсь получить паспорт для работы на паспорт-местном. Я перехожу к логину, но по какой-то причине, когда я пытаюсь перейти на защищенную страницу, он перенаправляет меня обратно на страницу входа. Вот код, у меня естьПаспорт NodeJS Express местный логин

app.js

var passport = require('passport'); 
var routes = require('./routes/index'); 
var app = express(); 

app.use(passport.initialize()); 
app.use(passport.session()); 

app.use('/', routes); 

маршруты/index.js

var passport = require('passport'); 
var Strategy = require('passport-local').Strategy; 
var manager = require('connect-ensure-login'); 
var db = require('../db'); 

/* Authentication */ 

passport.serializeUser(function(user, done) { 
    done(null, user); 
}); 

passport.deserializeUser(function(user, done) { 
    done(null, user); 
}); 

passport.use(new Strategy(function(username, password, done) { 
    db.users.findByUsername(username, function(err, user) { 
     if (err) { return done(err); } 
     if (!user) { return done(null, false); } 
     if (user.password != password) { return done(null, false); } 
     return done(null, user); 
    }); 
})); 

/* Login Page */ 
router.get('/login', function(req, res) { 
    res.render('login', { title: 'Login' }); 
}); 

router.post('/login', passport.authenticate('local', { 
    successRedirect: '/', 
    failureRedirect: '/login' 
    }) 
); 

/* Home Page */ 
router.get('/', manager.ensureLoggedIn(), function(req, res) { 
    res.render('index', { title: 'Order Search' }); 
}); 

Я думаю, что проблема может быть, это я не установить сеанс правильно и я теряю он на смену страницы. Спасибо за любую помощь

Update # 1

Поэтому я добавил экспресс сессии, но до сих пор я с такой же вопрос

app.js

var passport = require('passport'); 
var session = require('express-session'); 
var routes = require('./routes/index'); 
var app = express(); 

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

app.use('/', routes); 

ответ

0

Вы правы, это все о сессия. В connect-ensure-login вы можете прочитать, что «URL-адрес будет сохранен в сеансе». И в passport-middleware вы можете увидеть, как создается экспресс-сессия. Я не вижу этого в вашем коде, поэтому я предполагаю, что выражение не использует сеанс.

Если вы не инициализированы экспресс-сессии, использовать что-то вроде:

app.use(require('express-session')({ secret: 'keyboard cat', resave: true, saveUninitialized: true })); 

Проще всего проверить это, чтобы увидеть, что в вашем магазине сессии после входа в систему. Другое дело - распечатать информацию по каждому запросу и проверить, есть ли пользователь или нет.

+0

У объекта-объекта отсутствует функция сеанса. Нужно ли мне использовать что-то еще? – jrock2004

+0

Я отредактировал ответ. –

+0

Итак, я добавил его, см. Обновление 1. Но все же я не вижу его. Вы сказали, что я должен посмотреть, что находится на моей сессии. Как я могу это сделать? – jrock2004

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