我使用passportJS进行身份验证。我的配置如下:
app.use(express.bodyParser({uploadDir:'/tmp'}));
app.use(express.urlencoded());
app.use( express.cookieParser() );
app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
现在,从登录页面到下一页,我可以访问req.user.username
变量。
但是,我们假设我为会话定义了一个新变量,即req.session.x
,它不会在整个网络应用程序中保留。
现在,更糟糕的是,它在我的开发机器上工作,但在部署环境中却没有。我已经比较了nodejs,本地和全局插件版本,它们完全相同。
我还应该检查一下吗?感谢。
我的护照代码如下;
//Login
app.get('/login',login.login);
app.post('/login',passport.authenticate('local', {
successRedirect : '/loginSuccess',
failureRedirect : '/loginFailure'
}
));
app.get('/loginSuccess',login.success);
app.get('/loginFailure',login.fail);
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
var mongoose = require('mongoose/');
mongoose.connect('mongodb:<>');
var Schema = mongoose.Schema;
var UserDetail = new Schema({
username : String,
password : String
}, {
collection : 'user'
});
var UserDetails = mongoose.model('user', UserDetail);
passport.use(new LocalStrategy(function(username, password, done)
{
process.nextTick(function() {
UserDetails.findOne({
'username' : 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);
});
});
}));