Сервер Аполлона 2 + Auth0

Итак, у меня есть приложение, которое регистрирует меня через Auth0 и сохраняет токен jwt в файле cookie.

У меня также есть сервер Apollo 2, который извлекает данные. Как защитить сервер Apollo и вернуть данные только в том случае, если пользователь вошел в систему и проверен сервером 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.log(`???? Server ready at ${url}`)
});

person Chris F.    schedule 02.09.2018    source источник


Ответы (1)


getUser — это метод, который возвращает вашего пользователя с данным токеном. вам может понадобиться написать этот метод самостоятельно или использовать метод getUser OAuth.

После получения пользовательского объекта вы возвращаете его, так что теперь у вас есть доступ к пользовательскому объекту в ваших преобразователях. В вашем методе распознавателя третий параметр — это ваш объект контекста. вы можете получить доступ к пользовательскому объекту там. Если вы хотите защитить этот преобразователь, чтобы его разрешали только зарегистрированным пользователям, вы можете выдать ошибку, если пользователь имеет значение null или не определено.

Например:

export const resolvers = {
Query: {
  Me: (parent, args, { user }) => {
    if (!user) return Error(`Not Logged In!`)
    return user
  }
 }
}
person wrod7    schedule 04.09.2018