首页 > 解决方案 > 如何取消对未授权资源的订阅

问题描述

下面是我的 apollo 订阅实现的原型。每个用户都可以使用或不使用身份验证令牌连接到 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 };
    }
});

我在哪里以及如何拆除它?我假设在订阅解析器中,但找不到如何。在一个连接中为经过身份验证和未经身份验证的订阅提供服务通常是个好主意吗?

标签: node.jsapollo-servergraphql-subscriptions

解决方案


推荐阅读