Я пытаюсь реализовать graphql с JWT для паспорта, но поведение не то, что я ожидаю.
Конечная точка graphql не должна закрываться при аутентификации, так как несколько запросов являются открытыми, яМне было интересно, как я могу сделать GraphQL открытым и отфильтровать внутренне, если пользователь вошел в систему с помощью распознавателей?
Это мой код прямо сейчас, он работает правильно с JWT, но он закрывает конечную точку graphql и возвращает "Unauthorized""если я не укажу токен.
import express from 'express'
import { ApolloServer } from 'apollo-server-express'
import passport from 'passport'
import passportJWT from 'passport-jwt'
import schema from './schemas'
const { JWT_SECRET } = process.env
const path = '/graphql'
// ...
const users = [
{
id: 1,
name: 'John',
email: 'john@mail.com',
password: 'john123'
},
{
id: 2,
name: 'Sarah',
email: 'sarah@mail.com',
password: 'sarah123'
}
]
// ...
const { Strategy, ExtractJwt } = passportJWT
const params = {
secretOrKey: JWT_SECRET,
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken()
}
// ...
const strategy = new Strategy(params, (payload, done) => {
const user = users[payload.id] || null
if (user) {
return done(null, {
id: user.id
})
}
return done(new Error('The user has not been found'), null)
})
passport.use(strategy)
// ...
const app = express()
passport.initialize()
app.use(path, passport.authenticate('jwt', { session: false }))
// ...
const server = new ApolloServer({
schema
})
server.applyMiddleware({
app,
path
})
app.listen(
{
port: 4000
},
() => console.log(`The GraphQL server is running on port ${GRAPHQL_PORT}`)
)