自定义 KeystoneJS 端点中的会话/令牌验证

问题描述

我使用 here 概述的方法成功验证了用户对我的 keystonejs API 的请求。

但是,我需要向我的应用程序添加一个自定义快速端点,只有在其请求标头 (see this previous answer) 中具有有效令牌的用户才能访问该端点。

我一直在挖掘有关会话和中间件的 Keystone 文档,但这不是我的专业领域,我无法弄清楚如何验证请求令牌。

如何验证对我的自定义端点的 GET 请求的授权标头中的令牌?请注意这可能与表达和会话管理有关,而不是与 Keystone 相关。

解决方法

假设采用标准设置,可以将以下内容添加到 configureExpress(请参阅 here)以将 Keystone 会话中间件应用于自定义快速端点:

app.use('/myEndpoint',keystone._sessionManager.getSessionMiddleware({ keystone }));

那么:

const whitelist = ['http://localhost:4200'];
const corsOptions = {
  origin: function (origin,callback) {
    if (whitelist.indexOf(origin) !== -1 || !origin) {
      callback(null,true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  }
}

app.post('/myEndpoint',cors(corsOptions),(req,res) => {
  if (req.user) {
    // User is authorised
    res.send(req.user);
  } else {
    res.status(401).send()
  }
});

注意事项/问题:

  • 您的 POST 请求必须包含一个 GraphQL 查询,以针对您的用户进行身份验证
  • 必须正确配置 CORS 选项
  • 还必须提供 sessionStore - 请参阅 here