NodeJS Express护照本地登录

时间:2015-11-26 07:00:28

标签: node.js express passport.js passport-local

我正在努力获得使用护照本地工作的护照。我去登录但由于某种原因,当我尝试访问受保护的页面时,它会将我重定向回登录页面。这是我的代码

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

我认为问题可能是我没有正确设置会话而且我在页面更改时丢失了它。谢谢你的帮助

更新#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);

1 个答案:

答案 0 :(得分:1)

你是对的,这都是关于会议的。在app.use(require('express-session')({ secret: 'keyboard cat', resave: true, saveUninitialized: true })); 中,您可以读到“网址将保存在会话中”。在gson中,您可以看到如何创建快速会话。我在你的代码中没有看到,所以我猜是快递不使用会话。

如果您尚未完成初始化快速会话,请使用以下内容:

HEADERS += <your headers files>
#needed in QtCreator for correct display "#include" directives
INCLUDEPATH += <your deps> 
requires(false) #disable building

最简单的测试方法是在登录后查看会话商店中的内容。另一件事是打印每个请求的信息,并检查是否有用户。