【问题标题】:Passport object does not exist in session object in production environment生产环境会话对象中不存在 Passport 对象
【发布时间】:2018-02-02 18:41:45
【问题描述】:

护照对象在我的会话对象上不存在。它在我的本地环境中按预期工作,但是当我在 aws 上移动到我的生产服务器时,没有护照对象。会话已成功存储在我的 dynamoDB 存储中,但未显示在请求中。

这是我对 req.session 对象的期望(以及我在本地环境中得到的):

session: 
   Session {
     cookie: 
      { path: '/',
        _expires: null,
        originalMaxAge: null,
        httpOnly: true },
     passport: { user: [Object] } } <------- This Object

这是我在生产中得到的:

 session: 
       Session {
         cookie: 
          { path: '/',
            _expires: null,
            originalMaxAge: null,
            httpOnly: true,
            secure: false } }
    ---------No sign of the passport object---------

服务器设置:

// DynamoDBStore Configuration
const options = {
  table: 'capture-sessions',
  AWSConfigJSON: {
    accessKeyId: awsConfig.accessKeyId,
    secretAccessKey: awsConfig.secretAccessKey,
    region: 'us-east-2'
  }
};

app.use(cors());

app.use(expressSession({
  store: new DynamoDBStore(options),
  secret: 'keyboard cat',
  saveUninitialized: false,
  resave: false,
  cookie: {
    secure: false,
    path: '/',
    httpOnly: true
  }
}));

app.use(passport.initialize());
app.use(passport.session());
require('./passport/init')(passport);

【问题讨论】:

  • 您在 AWS 中的部署模型是什么?
  • 只是一个基本的 EC2 实例

标签: node.js amazon-dynamodb passport.js express-session


【解决方案1】:

如果您正在访问远程/生产站点并且它使用https,您需要有secure :true。现在我在你的代码中看到它说安全是错误的。你可以使用这样的东西。

    cookie: { 
        secure : process.env.NODE_ENV === "production" ? true : false
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2017-08-25
    • 1970-01-01
    • 2017-12-06
    • 2012-01-26
    相关资源
    最近更新 更多