Apollo Server 2 + Auth0 - PullRequest
       37

Apollo Server 2 + Auth0

0 голосов
/ 03 сентября 2018

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

У меня также есть сервер 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}`)
});

1 Ответ

0 голосов
/ 04 сентября 2018

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

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

Например:

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