`req.session.secret`未在使用express-session的路由中定义

时间:2016-05-24 13:22:03

标签: javascript node.js express

我有一个使用快速会话的简单应用程序。这是我的入门脚本,我发起会话。

export const app = express();
export const server = Server(app);

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(session({
  secret: "changed to nonsense string for this question",
  resave: true,
  saveUninitialized: true,
  cookie: { maxAge: 60000 }
}));
app.use('/api/v1/auth', require('./users'));

根据documents of express-session,我应该可以通过req.session访问它。我想获取用于在一个路由中创建json令牌的密钥。这是我的工作:

export const routes = Router();
routes.post('/login', function (req, res, next) {
  // ...
  const token = jwt.sign(user, req.session.secret, { expiresIn: '5m' });
});

export default routes;

但是,它始终表示req.session.secret未定义。我究竟做错了什么?如何在路径中访问会话密钥?

1 个答案:

答案 0 :(得分:1)

Objectsecret配置的一部分,但无法通过express-session访问(我认为这是故意的)。

如何从您的路线访问它取决于您从哪里获得秘密。通常这是来自环境或配置变量,我不明白为什么你不能直接从你的路由处理程序访问它们。

如果秘密是硬编码的,并且你想保持这种方式,你可以为它创建一个单独的模块,无论你需要什么秘密,都可以是require()'。