Итак, у меня есть приложение, которое регистрирует меня через Auth0 и сохраняет токен jwt в файле cookie.
У меня также есть Apollo Server 2, который извлекает данные. Как мне защитить Apollo Server и вернуть данные только в том случае, если пользователь вошел в систему и проверен сервером Auth0?
Приведенный ниже код взят прямо из https://www.apollographql.com, но я не понимаю, как обрабатывать getUser(token) ниже, чтобы на самом деле проверить действительный JWT в заголовке авторизации, и, если он присутствует, пользователю будет разрешен доступ к защищенным ресурсам?
// using apollo-server 2.x
const { ApolloServer } = require('apollo-server');
const server = new ApolloServer({
typeDefs,
resolvers,
context: ({ req }) => {
// get the user token from the headers
const token = req.headers.authorization || '';
// try to retrieve a user with the token
const user = getUser(token);
// add the user to the context
return { user };
},
});
server.listen().then(({ url }) => {
console.info(`? Server ready at ${url}`)
});





getUser - это метод, который возвращает вашего пользователя с заданным токеном. вам может потребоваться написать этот метод самостоятельно или использовать метод OAuth getUser.
После получения пользовательского объекта вы возвращаете его, так что теперь у вас есть доступ к пользовательскому объекту в ваших преобразователях. В вашем методе преобразователя третий параметр - это ваш объект контекста. вы можете получить доступ к объекту пользователя там. Если вы хотите защитить этот преобразователь, чтобы он был разрешен только зарегистрированным пользователям, вы можете выдать ошибку, если user имеет значение null или undefined.
Например:
export const resolvers = {
Query: {
Me: (parent, args, { user }) => {
if (!user) return Error(`Not Logged In!`)
return user
}
}
}