Heroku上缺少Express / Node.js connect.sid

我遇到的问题很简单:

  • 我在前端使用Nuxt.js SSR Heroku应用程序,该应用程序代理对Python API Heroku应用程序的请求
  • connect.sid会话cookie出现在本地开发人员工作中
  • 由于某种原因,当推送到Heroku进行登台或生产时,connect.sid cookie不会出现。

我使用connect.sid cookie的目标是拥有一个HttpOnly cookie,该cookie无法被前端修改,以便我可以安全地对用户进行身份验证。

此设置通常基于此模板,该模板为Nuxt.js和flask堆栈(https://github.com/danjac/nuxt-python-secure-example)设置了安全的身份验证流。


本地:

Heroku上缺少Express / Node.js connect.sid


在Heroku上:

Heroku上缺少Express / Node.js connect.sid


以下是我的server.js代码:

const { Nuxt,Builder } = require('nuxt')
const bodyParser = require('body-parser')
const session = require('express-session')
// const cookieParser = require('cookie-parser')
const csurf = require('csurf')
const proxy = require('http-proxy-middleware')
const axios = require('axios')
const app = require('express')()
const redis = require('redis')
const RedisStore = require('connect-redis')(session);

let config = require('./nuxt.config')
const isRemote = ['production','test'].includes(process.env.NODE_ENV)

if (!isRemote) {
  require('dotenv').config()
}

const API_URL = process.env.API_URL

const redisClient = (() => {
  if (isRemote) {
    return redis.createclient(process.env.REDIS_URL)
  } else {
    return redis.createclient({
      host: process.env.REDIS_HOST,port: process.env.REDIS_PORT
    })
  }
})()

app.use(session({
  name: 'some_session',store: new RedisStore({client: redisClient}),secret: process.env.SECRET_SESSION_KEY,resave: false,saveUninitialized: true,cookie: {
    path: "/",maxAge: 1000 * 60 * 60 * 24,secure: true,httpOnly: true
  }
}))

app.use(bodyParser.json())

app.use(csurf({ cookie: false }))

我看了其他一些问题(例如thisthis),但似乎根本无法解决这个问题。


还涉及的是,Redis会填充许多条目,以供单次访问该页面。下图仅是对服务器的3个请求之后。

Heroku上缺少Express / Node.js connect.sid


弄清为什么connect.sid除了dev之外什么都不出现,但我也想弄清楚Redis中的多个会话条目是否与此问题有关。

我设置的session错误吗?我缺少一些中间件来完成这项工作吗?

zhongnancrack 回答:Heroku上缺少Express / Node.js connect.sid

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3084015.html

大家都在问