アプリケーションでgraphqlサブスクリプションを保護するための構成をテストしようとしています。
これはApolloServer
コンストラクターでの私の設定です:
const app = express();
const jwt_authentication = jwt({
secret: JWT_SECRET,
credentialsRequired: false
})
const server = new ApolloServer({
typeDefs,
resolvers,
introspection: true,
playground: true,
formatError: error => {
console.log(error);
},
context: async ({req, connection }) => {
if (connection) {
return connection.context;
} else {
return some_method_to_return_user_info;
}
},
subscriptions: {
onConnect: async (connectionParams, webSocket, context) => {
const user = await jsonwebtoken.verify(connectionParams.jwt, JWT_SECRET);
const userInfo= some_method_to_return_user_info;
if (userInfo) {
return { user: userInfo };
}
throw new Error("Unauthorized subscription");
}
}
});
app.use(GRAPHQL_PATH, jwt_authentication);
//...
GraphQL Playground でサブスクリプションを実行すると、次のエラーが表示されます。
jwt must be provided
ヘッダーをテストしてから をテストしました"Authorization": "Bearer MY_TOKEN"
が"jwt": "MY_TOKEN"
、それほど単純ではないと思います。
クライアント コードを実装せずにサブスクリプションをテストする可能性はありますか?