Я открываю для себя Nest.js и хочу установить систему аутентификации на основе файлов cookie с помощью GraphQL.
Я уже установил промежуточное программное обеспечение Express-сеанса, вот конфигурация:
main.ts
app.use(
session({
store: new redisStore({
client: redis
} as any),
name: 'qid',
secret: SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: !isDev,
maxAge: 1000 * 60 * 60 * 24 * 7 * 365
}
})
)
работает нормально, потому что когда я делаю:
app.use((req: any, res: any, next: any) => {
// Debug purpose
req.session.userId = '42'
next()
})
Файл cookie добавлен.
Прямо сейчас у меня есть две мутации: регистрация и логин .
В мутации входа в систему (или в userService) после того, как я нашел пользователя, я хочу сделать что-то вроде req.session.userId = user.id
, но я не могу найти способ сделать это.
Я пытался добавить @Context() ctx
к своей мутации.
Если я консоль журнала ctx, он содержит все, что я ожидаю (например, req.session.id)
Но если я сделаю ctx.req.session.userId = 'something'
, файл cookie не будет установлен!
Вот моя мутация:
user.resolver.ts
@Mutation('login')
async login(
@Args('email') email: string,
@Args('password') password: string,
@Context() ctx: any
) {
console.log(ctx.req.session.id) // Show the actual session id
ctx.req.session.userId = 'something' // Do not set any cookie
return await this.userService.login(email, password)
}
}
Я полностью потерян и мне действительно нужна помощь, я бы хотел понять, что происходит. Я знаю, что, возможно, я делаю это совершенно неправильно, но я новичок в Nest и GraphQL ..
Спасибо, ребята ...