阿波罗服务器 2 + Auth0

Posted

技术标签:

【中文标题】阿波罗服务器 2 + Auth0【英文标题】:Apollo Server 2 + Auth0 【发布时间】:2019-02-08 01:00:08 【问题描述】:

所以我有一个应用程序通过 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.log(`???? Server ready at $url`)
);

【问题讨论】:

【参考方案1】:

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

获取用户对象后,您将返回它,因此现在您可以访问解析器中的用户对象。在您的解析器方法中,第三个参数是您的上下文对象。您可以在那里访问用户对象。如果您想保护该解析器只允许登录用户使用,如果用户为空或未定义,您可以抛出错误。

例如:

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

【讨论】:

以上是关于阿波罗服务器 2 + Auth0的主要内容,如果未能解决你的问题,请参考以下文章

带有棱镜 2 的阿波罗服务器

阿波罗服务器 2.0。在文档中找不到类型“上传”

带有 Auth0 路由错误 404 的 Angular 2

Oauth 2.0 与 Auth0 与 WSO2

在nestjs应用程序中使用新的阿波罗服务器版本的打字稿错误

Auth0 嵌入式登录流程