使用 GraphQL 和 jwt-express 绕过 JWT
Posted
技术标签:
【中文标题】使用 GraphQL 和 jwt-express 绕过 JWT【英文标题】:Bypass JWT with GraphQL and jwt-express 【发布时间】:2018-06-25 05:49:45 【问题描述】:对于我的后端,我使用 Node.js、Express 和 GraphQL。我已经使用 jwt 实现了身份验证,如果没有用户登录,它将保护我的路由。问题是我希望某些路由不受保护,即您不必登录即可查看 /home
。
因为我在这个项目中使用 Express,所以我也有 jwt-express,他们提供了类似这样的东西:.unless(path: ['/token'])
。现在,如果我有 REST-API,这将工作,但因为我只有 GraphQL 和 GraphQL有一条路行不通。
我的index.js
文件中只有这个:
app.use(jwt(secret: constants.JWT_SECRET))
app.use(
graphqlEndpoint,
bodyParser.json(),
graphqlExpress(async req =>
let user = null
if (req.user)
user = await knex(‘users’).where(‘id’, req.user.id).first()
console.log(user)
return
schema,
context: user
)
)
但我必须确保它让我进入,无论是否使用令牌。
所以我只是想知道是否有人对如何实现这一点有一些提示,因为我很困惑。
【问题讨论】:
您能否与我分享您的方法,我在过去一周一直坚持这一点。如果我在中间件之前添加登录名(一个 graphqlExpress 但 graphql 端点相同),我将无法访问其他实体(其他 graphqlExpress 但端点 graphql 相同)。如果我在同一个 graphqlExpress 函数中添加错误是没有找到令牌,因为我在这里添加了中间件。 .我谷歌但没有关闭的解决方案。谢天谢地,我找到了你的帖子。请帮帮我,我被卡住了:( @Tested 同上。关于这个或来源的任何解决方案?希望对此有一些指导。 【参考方案1】:如果您使用app.use(jwt(secret: constants.JWT_SECRET))
,它将在每个请求中读取 JWT。有两种选择:
【讨论】:
感谢您的回复。我想我现在必须做很多谷歌搜索,呵呵【参考方案2】:可以指定 express-jwt 让未注册用户通过:
app.use(jwt(
secret: 'hello world !',
credentialsRequired: false
));
来源:express-jwt 的 README.md https://github.com/auth0/express-jwt
【讨论】:
以上是关于使用 GraphQL 和 jwt-express 绕过 JWT的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GraphQL.Net 和 c# 将集合传递给 GraphQL 突变?
使用 REST 包装 GraphQL 从 NestJS 提供 GraphQL 和 REST API
GraphQL 和 graphql-sequelize-schema-generator