node.js - 阿波罗服务器 2 + Auth0
问题描述
所以我有一个应用程序通过 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}`)
});
解决方案
getUser 是使用给定令牌返回用户的方法。您可能需要自己编写该方法或使用 OAuth 的 getUser 方法。
获取用户对象后,您将返回它,因此现在您可以访问解析器中的用户对象。在您的解析器方法中,第三个参数是您的上下文对象。您可以在那里访问用户对象。如果您想保护该解析器只允许登录用户使用,如果用户为空或未定义,您可以抛出错误。
例如:
export const resolvers = {
Query: {
Me: (parent, args, { user }) => {
if (!user) return Error(`Not Logged In!`)
return user
}
}
}
推荐阅读
- c# - 如何以给定的叠加顺序绘制图片?(层...)
- deep-learning - 未知错误:获取卷积算法失败
- python - 在python中填充一个空列表
- reporting-services - SSRS 子报表参数 - 多值
- python - 运行 python 代码的 crontab 未将输出保存到文件
- python - Python pandas - 使用 pandas.to_datetime() 将字符串转换为没有年份的日期时间
- unity3d - Unity3D中的搅拌机,粒子
- html - 覆盖溢出的问题隐藏
- python - 将python中的数据透视表转换为可视化图表
- python - 创建广义公式以创建收益预测