2016-11-15 81 views
1

我想构建一个基本的登录功能,并测试它创建一个会话,我可以稍后使用。我正在使用express-session和redis来保存会话数据。这里是我的设置:请求cookie不返回按预期方式快速会话数据

app.use(bodyParser.json()) 
app.use(bodyParser.urlencoded({extended: true})) 
app.use(express.static(path.join(__dirname, 'client/build'))) 

app.use(cookieParser(process.env.COOKIE_SECRET)) 
app.use(session({ 
    store: new redisStore({ 
    host: '127.0.0.1', 
    port: 6379 
    }), 
    secret: process.env.SESSION_SECRET, 
    cookie: {maxAge: 1800}, 
    name: 'appName', 
    resave: false, 
    saveUninitialized: false 
})) 

app.use('/', routes) 

然后我登录路由:

router.post('/api/login', (req, res) => { 
    req.session.userId = req.body.id 
    req.session.email = req.body.email 

    //do I need to send out a cookie with the session created here? 
    res.set({'Set-Cookie': 'appSession=' + req.session.id}) 
    res.status(200).send({ 
    "message": `User ${req.body.id} logged in with cookie ${req.session.id}` 
    }) 
}) 

然后,它是我的理解,我应该能够读取并加入到这个会话在那里我将cookie发送回的任何请求。这是我的API来测试:

router.post('/api/test' (req, res) => { 
    if(req.session && req.session.userId) { 
    res.status(200).send({"message": `User ID ${req.session.userId} is authenticated`}) 
    } else { 
     res.status(401).send({"message": `User ID ${req.session.id} is not authenticated`}) 
    } 
}) 

我发送给使用邮差用头Cookie: appName=${sessionID}使用在api/login路线创建的会话ID这个API的请求。这总是创建一个新的sessionId并返回401.

我的理解是否正确?如果是这样,我该如何创建这种预期的行为?

回答

1

我现在已经得到了一个答案 - 在互联网上有一些我并不认为清楚的东西。

首先,它是有用的,如果您有任何关于express-session麻烦,用DEBUG=express-session node server.js

运行的服务器当我这样做,我意识到express-session没有找到创建的会话调试问题。这是因为我在几秒钟内设置了maxAge属性,而不是毫秒,因此它立即过期。白痴。

还有一个问题。我试图以检索会话时下列调试输出:

express-session cookie unsigned +1ms 
    express-session no SID sent, generating session +1ms 

这是该cookie解析器没有找到我的SessionID,因为cookie解析器需要使用相同的密钥为express-session。再次,回想起来非常明显。

希望这可以帮助那些得到相同错误的人。

相关问题