Я пытаюсь переключить express-graphql на apollo-server v2, но мне сложно переносить пакеты, особенно с passportjs и сессией.
Моя текущая настройка с помощью express-graphql:
const schema = include('schema')
const app = express()
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(session({
secret: process.env.SESSION_SECRET,
name: 'sessionId',
resave: false,
saveUninitialized: false,
store: new MongoStore({ mongooseConnection: mongoose.connection }),
}))
app.use(passport.initialize())
app.use(passport.session())
app.use('/graphql', expressGraphQL({ schema }))
const server = http.createServer(app)
server.listen(8000, '0.0.0.0', () =>
console.log('Server running on port 8000')
)
А теперь с apollo-server-express @ rc:
const schema = include('schema')
const app = express()
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(session({
secret: process.env.SESSION_SECRET,
name: 'sessionId',
resave: false,
saveUninitialized: false,
store: new MongoStore({ mongooseConnection: mongoose.connection }),
}))
app.use(passport.initialize())
app.use(passport.session())
const apollo = new ApolloServer({
schema,
context: ({ req: { user, session } }) => ({ user, session })
})
apollo.applyMiddleware({ app, path: '/graphql' })
server.listen(8000, '0.0.0.0', () =>
console.log('Server running on port 8000')
)
С этим я получаю user
и session
объекты в контексте и работает как прежде, но когда я пытаюсь login()
или logout()
пользователей через context
, он говорит login is not a function
.
Хорошо, так что в контексте, context: ({ req: { user, session, login, logout } }) => ({ user, session, login, logout })
и попробуйте снова, но теперь я получаю Passport is not initialized
Раньше мне не нужно было устанавливать контекст с помощью express-graphql, вот где я застрял. Пожалуйста, помогите?