Apollo服务器2 + Auth0

时间:2018-09-02 23:48:59

标签: node.js graphql auth0 apollo apollo-server

所以我有一个应用程序,它通过Auth0登录我并将jwt令牌保存在cookie中。

我还有一个Apollo Server 2,可以检索数据。如何保护Apollo服务器并仅在用户登录并由Auth0服务器验证后才返回数据?

下面的代码直接来自https://www.apollographql.com,但是我不明白如何处理下面的getUser(token)来实际检查Authorization标头中的有效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 :(得分:1)

getUser是使用给定令牌返回用户的方法。您可能需要自己编写该方法或使用OAuth的getUser方法。

获取用户对象后,您将返回它,因此现在您可以访问解析器中的用户对象。在您的解析器方法中,第三个参数是您的上下文对象。您可以在那里访问用户对象。如果要保护该解析程序仅由登录用户允许,则可以在user为null或未定义的情况下引发错误。

例如:

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