ExpressJS与PassportJS:会话处理

时间:2014-08-26 03:15:47

标签: node.js session express passport.js

我使用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);
         });
     });
}));

0 个答案:

没有答案