【问题标题】:How to properly setup redis for session store如何为会话存储正确设置 redis
【发布时间】:2015-04-26 04:47:22
【问题描述】:

我正在尝试这样设置 Redis 商店:

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 放在主机密钥中吗?我使用的是 Cloud 9,而不是我的本地主机。

我做错了什么?

【问题讨论】:

    标签: javascript node.js express redis


    【解决方案1】:

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

    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);
    });
    

    希望对你有所帮助

    【讨论】:

    • 我也在使用 https,我要试试这个,我告诉你是否有效。
    【解决方案2】:

    遇到了类似的问题。是的,您可能没有为您创建的客户端运行 Redis 服务器。尝试在你的机器上安装和运行 redis-server,这对我来说是成功的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-21
      • 2018-01-25
      • 1970-01-01
      • 2020-12-05
      • 2012-10-08
      • 1970-01-01
      • 2019-03-10
      • 2015-01-14
      相关资源
      最近更新 更多