发布
社区首页 >问答首页 >请求cookie未按预期返回Express会话数据

请求cookie未按预期返回Express会话数据
EN

Stack Overflow用户
提问于 2016-11-15 21:25:12
回答 1查看 1.8K关注 0票数 2

我正在尝试构建一个基本的登录功能,并测试它是否创建了一个我以后可以使用的会话。我使用express-session和redis来持久化会话数据。下面是我的设置:

代码语言:javascript
代码运行次数:0
复制
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)

然后我的登录路线:

代码语言:javascript
代码运行次数:0
复制
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:

代码语言:javascript
代码运行次数:0
复制
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`})
   }
})

我使用Postman向此接口发送请求,邮件头为Cookie: appName=${sessionID},使用在api/login路由中创建的sessionID。这将始终创建一个新的sessionId并返回401。

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

EN

回答 1

Stack Overflow用户

发布于 2016-11-16 00:23:01

我现在有了一个答案--有几个我认为在互联网上的其他来源不清楚的比特。

首先,如果您在使用express-session时遇到问题,可以通过使用DEBUG=express-session node server.js运行您的服务器来调试问题

当我这样做的时候,我意识到express-session没有找到创建的会话。这是因为我以秒为单位设置了maxAge属性,而不是毫秒,所以它会立即过期。笨蛋。

然后还有一个更深层次的问题。在尝试检索会话时,我得到了以下调试输出:

代码语言:javascript
代码运行次数:0
复制
  express-session cookie unsigned +1ms
  express-session no SID sent, generating session +1ms

这是cookie解析器找不到我的SessionId,因为cookie解析器需要使用与express-session相同的键。再说一次,回想起来是很明显的。

希望这能帮助那些遇到同样错误的人。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40610968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档