所以,我创建了一堆突变和查询,并缝合在一起的作品,并希望引进认证进入组合。我添加了一个HTTP头“X-令牌”,以保持我的登录令牌能够删除喜欢自己的工作,或者用户本身的东西。
const getMe = async req => {
const token = req.headers['x-token'];
if (token) {
try {
return await jwt.verify(token, "notSoSecret");
} catch (e) {
throw new AuthenticationError(
'Your session expired. Sign in again.',
);
}
}
};
const server = new ApolloServer({
typeDefs: schema,
resolvers,
formatError: error => {
// remove the internal sequelize error message
// leave only the important validation error
const message = error.message
.replace('SequelizeValidationError: ', '')
.replace('Validation error: ', '');
return {
...error,
message,
};
},
context: async ({ req }) => {
const me = await getMe(req);
return {
models,
me,
secret: "notSoSecret",
}
},
path: "/graphql"
});
server.applyMiddleware({ app });
sequelize.sync().then(async () => {
createUsersWithJob();
});
app.get("/playground", graphiql({ endpoint: "/graphql" }));
const handler = serverless(app);
export { handler };
const createUsersWithJob = ... //creates seed data
所以,当我添加了标记,我看着我的命令行控制台,我居然看到我的设置,我想报头,但它循环一遍又一遍,并没有停止。此外操场得到一个错误“服务器无法到达”
{
"error": "Response not successful: Received status code 400"
}
和运行deleteUser突变不工作,或其他任何突变和查询此事,直到我删除,我在操场上设置的HTTP标头。
还有这里的一切在这根文件运行两次次要问题,但是,在目前所概括的标题问题,不是我的一样大。
如果任何人有任何深入了解这一点,我很想知道更多。提前致谢。
编辑:只是一个快速的编辑说,这时候我硬编码预先存在的用户正常工作。
我有相当的斗争得到GraphQL游乐场的一个非常简单的HTML设置内工作做出反应的版本,但我想出来的东西,可能会帮助您以及(手指交叉)。
我在headers
通话增添了GraphQLPlayground.init
部分的配置,如下所示:
const root = document.getElementById('root');
GraphQLPlayground.init(root, {
endpoint: "/graphql",
headers: {
"Authorization": "Bearer " + token
}
})
我有,因为这一个id root
的元素嵌入在HTML中。
不知道这会帮助你,虽然,因为我刚刚从你打电话graphiql
这是一个不同的GraphQL客户比GraphQL游乐场您的代码示例注意到..
GraphIQL:https://github.com/skevy/graphiql-app GraphQL游乐场:https://github.com/prisma/graphql-playground