问题描述
我使用 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