使用GraphQL和jwt-express绕过JWT

时间:2018-01-16 13:41:11

标签: node.js express authentication jwt graphql

对于我的后端,我使用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}
   }
 })
)

但是我必须确保它能让我进入,无论是否拥有或使用令牌。

所以我只是想知道是否有人有关于如何实现这一点的一些提示,因为我很困难。

2 个答案:

答案 0 :(得分:1)

如果您使用app.use(jwt({secret: constants.JWT_SECRET})),它将在每个请求中读取JWT。有两个选项:

  • 您可以在所需的特定路由中应用中间件 认证
  • 您应该在使用jwt。
  • 之前添加登录路由

答案 1 :(得分:0)

您可以通过以下方式指定express-jwt以允许未注册的用户:

app.use(jwt({
  secret: 'hello world !',
  credentialsRequired: false
}));

来源:express-jwt' README.md https://github.com/auth0/express-jwt