контекстный API в сервере Apollo предлагает обработку запроса следующим образом
const initGraphQLserver = () => {
const graphQLConfig = {
context: ({ req, res }) => ({
user: req.user,
}),
rootValue: {},
schema,
};
const apolloServer = new ApolloServer(graphQLConfig);
return apolloServer;
};
Это предполагает, что у вас будет надлежащее промежуточное ПО, которое будет анализировать cookie или заголовок. Это зависит от вашего механизма аутентификации, так как вам нужно было предварительно настроить пользователя для запроса в некотором промежуточном программном обеспечении, если вы хотите использовать JWT, вы можете использовать, например, это промежуточное программное обеспечение
const auth = (req, res, next) => {
if (typeof req.headers.authorization !== 'string') {
return next();
}
const header = req.headers.authorization;
const token = header.replace('Bearer ', '');
try {
const jwtData = jwt.verify(token, JWT_SECRET);
if (jwtData && jwtData.user) {
req.user = jwtData.user;
} else {
console.log('Token was not authorized');
}
} catch (err) {
console.log('Invalid token');
}
return next();
};
Это промежуточное ПО будет вводить пользователя, если токен jwt верен, тогда в файле вашего сервера вам нужно будет иметь следующий порядок промежуточного ПО
const app = express();
app.use(auth);
initGraphQLserver().applyMiddleware({ app });
Теперь у вас должен быть пользователь в контексте вашей схемы. Я надеюсь, что это понятно, код не завершен, но все должно быть легко завершить.