javascript - 如何为 session 存储正确设置 redis

标签 javascript node.js express redis

我正在尝试像这样设置 Redis Store:

var express = require('express');
var app = express();
.......
.......
var session = require('express-session');
var redis = require("redis").createClient();
var RedisStore = require("connect-redis")(session);

app.use(session({
  store: new RedisStore({
     host: 'localhost',
     port: 6379,
     client: redis
   }),
  secret: 'keyboard cat'
}));

但是像这样使用 passport.js 将无法工作并且 express-flash 会抛出一个错误:`Error: req.flash() requires sessions.

我认为 Redis 根本无法正常工作。

我对配置也很困惑,我应该把 localhost 放在主机 key 中吗?我使用的是 Cloud 9,而不是我的本地主机。

我做错了什么?

最佳答案

不确定我能否在 passport.js 和 express-flash 方面为您提供帮助,但这就是我使用 express、redis 和 socket.io 设置 session 的方式:

var express = require('express');
var session = require('express-session');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var RedisStore = require('connect-redis')(session);
............
var cookieSecret = "secret phrase";
var sessionMiddleware = session({
    store: new RedisStore({
        host: '127.0.0.1',
        port: 6379,
        prefix: 'sess'
    }),
    secret: cookieSecret,
    cookie: {httpOnly: true, secure: true}, //I'm using https, so you should remove secure: true
    resave: true,
    saveUninitialized: true
});
.....
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser(cookieSecret));
app.use(sessionMiddleware);
....
var io = require('socket.io')(https);
io.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res, next);
});

io.on('connection', function(socket){
    console.log("connected");
    console.log(socket.request.session);
});

希望对您有所帮助

关于javascript - 如何为 session 存储正确设置 redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28697889/

相关文章:

javascript - mailto : supported? 有多好

javascript - 如何使用 Yargs 实现多个子命令?

node.js - Socket.IO 版本输出

javascript - Express 和 Vue 路由页面和 API

javascript - 使用 angularJs 格式化电话号码

javascript - 多个PDF下载

node.js - 获取 google.sqladmin 不是函数错误

node.js - 组织expressjs路线时遇到问题

javascript - Express 3 的跨 session 问题

javascript - 在 React (ES6) 中访问 Passport 的 req.user? API 调用返回未定义的 req.user