我一直在本地与 Couch 和 Redis 一起构建 Express 应用程序。它一直运行良好。
我现在正在寻求使用托管在 Iris Redis 上的远程 Redis 服务器。我已经尝试了好几天,但似乎无法让 Express 的 Connect-redis 在使用 Passport 的本地策略进行身份验证后返回 cookie。这工作得很好,但是当我有一个本地 Redis 服务器运行时。
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use('/upload', upload.fileHandler());
app.use(express.bodyParser({ keepExtensions: true, uploadDir: 'public/uploads' }));
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ cookie: { maxAge: 60000000 }, secret: "sauce", store: new RedisStore({
port: 6379,
host: 'url',
pass: 'sauce'
}) }));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
// Authentication
passport.use(new LocalStrategy(function(username, password, done) {
username = username.toLowerCase();
db.get(username, function (err, doc) {
if (err) {
console.log(err);
return done(err);
}
if (!doc) {
return done(null, false, { message: 'No user by that name.' });
}
if ( doc.password !== password ) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, doc);
});
})
);
passport.serializeUser(function (user, done) {
done(null, user._id);
});
passport.deserializeUser(function (userId, done) {
db.get(userId, function(err, user){
if(err){
return (500, err);
} else {
done(null, _.omit(user, ["password"]));
}
});
});
// Route
exports.authenticate = passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login'
});