我用这里概述的方法成功地验证了用户对KeystoneJS API的请求。
然而,我需要在我的应用程序中添加一个自定义express端点,它应该只有在请求头中具有有效令牌的用户才能访问(参见前面的答案)。
我一直在挖掘关于会话和中间件的Keystone文档,但这不是我的专业领域,我不知道请求令牌是如何被验证的。
我如何验证对自定义端点的GET
请求的授权头中的令牌?理解这可能与表达和会话管理有关,而不是特定于Keystone。
假设有一个标准的设置,可以在configureExpress
(见这里)中添加以下内容来将Keystone会话中间件应用于自定义express端点:
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
-参见此处