下面是我的阿波罗订阅实现的原型。每个用户都可以使用或不使用身份验证令牌连接到Websocket。但是只有当他们发送请求时,如果用户被授权,我应该能够为该请求提供服务,或者断开Websocket连接。
const server = new ApolloServer({
typeDefs,
resolvers,
subscriptions: {
onConnect: async (connectionParams, webSocket) => {
if (connectionParams.authToken) {
try {
const user = await authenticate(connectionParams.authToken);
if(user) {
return { user };
}
} catch (error) {
return {};
}
}
return {};
},
},
context: async ({ req, res, connection }) => {
if (connection) {
return connection.context;
}
let user = null;
try {
user = await authenticateFromHeader(req);
} catch (error) {
console.log(error);
}
return { req, res, user };
}
});
我在哪里以及如何拆除它?我假设在订阅解析器中,但找不到方法。在一个连接中为经过身份验证的订阅和未经身份验证的订阅提供服务通常是个好主意吗?