我在Nodejs + Express上有一些项目。要在网站上登录,我将passportjs
与localStrategy
一起使用。
如果我在本地主机上登录,req.isAuthenticated
返回true
并且会话工作正确。
但是当我在开发服务器上执行此操作时,req.isAuthenticated
会返回false
并且会话将会失败。
我尝试在模块上找到错误,但它们的工作正确。
这是我的代码:
表达会话
var session = require('express-session'),
express = require('express'),
RedisStore = require('connect-redis')(session);
var date = new Date;
date.setDate(date.getDate() + 30);
module.exports = session({
secret: 'SECRET',
resave: true, //don't save session if unmodified
saveUninitialized: true, // create session until something stored
expires: date.toUTCString(),
cookie: {
secure: false,
httpOnly : true,
maxAge : 30 * 60 * 1000 //30 minutes
},
rolling: true
});
login.js
exports.post = function (req, res, next) {
passport.authenticate('local', { badRequestMessage: 'Error in your fields' },
function (err, user, info) {
if (err) return next(err);
if (user) {
req.logIn(user, function (err) {
if (err) return next(err);
return res.format({
json: function () {
res.json({
link : '/personal/cabinet/'
});
}
});
});
} else {
return res.format({
html: function () {
res.render('auth/login', {
error: info.message,
title: 'Login'
});
},
json: function () {
res.json(info);
}
});
}
}
)(req, res, next);
};
pasportjs
var passport = require('passport'),
localStrategy = require('./strategy/localStrategy'),
models = require('models'),
Author = models.author;
//get user data for session
passport.serializeUser(function (user, done) {
done(null, user);
});
passport.deserializeUser(function (user, done) {
Author.findOne({
where: {
id: user.id
}
}).then(function (user) {
done(null, user);
});
});
localStrategy(passport);
module.exports = passport.initialize();
app.js
...
app.use('bodyParserJson');
app.use('bodyParserUrldecoded');
app.use('cookieParser');
app.use(path.join('authPassport', 'session')); //express-session
app.use(path.join('authPassport', 'init')); //pasportjs
app.use(passport.session());
...
版本: 护照:0.3.2, 快递:1.13.0, 表达:4.13.1, nodejs:4.2.6
可能是什么问题?感谢